Halo,
Saya menemukan bug dalam penguraian C menggunakan ctags (juga ada di ctags riang).
Masalahnya adalah sebagai berikut:
#include <stdio.h>
#define PRAGMA(x) _Pragma(#x)
PRAGMA(bar)
int foo() {
int a = 1;
printf("a = %d\n", a);
}
void main(void) {
foo();
}
Output dari file ctags tidak memiliki fungsi foo()
seperti di bawah ini.
PRAGMA f.c /^#define PRAGMA(/;" d file:
PRAGMA f.c /^PRAGMA(bar)$/;" f
main f.c /^void main(void) {$/;" f
Terima kasih!!
Terima kasih telah melaporkan.
Penting tetapi memperbaikinya tidak mudah.
Catatan pribadi: Kita harus merekam definisi makro dalam directiveDefine dari get.c
lapisan gabus saya bekerja di cabang dapat digunakan. Aliran input harus diretas.
Saya harus memeriksa aliran input berbasis memori geany.
@masatake
Apakah Anda membuat kemajuan dalam hal ini?
Apakah cabang Anda tersedia di suatu tempat?
Tidak. Saya tidak melakukan apa pun tentang topik ini.
Mungkin Anda bisa menggunakan ctags -I 'PRAGMA+'
untuk melewati bagian ekspansi makro.
Catatan pribadi: Kita harus merekam definisi makro di directiveDefine dari get.c cork layer
Ini tidak akan cukup untuk menyelesaikan semua penggunaan makro, karena banyak yang bisa berasal dari header yang disertakan, dan meluas ke hal-hal aneh, jadi tanpa preprosesor C yang lengkap, itu tidak akan pernah sempurna. Jadi saya bertanya-tanya apakah masuk akal untuk menambahkan semua kerumitan yang diperlukan untuk melacak ekspansi makro jika itu tidak akan pernah cukup.
@b4n , saya setuju.
Saya tidak tahu triknya tetapi parse baru menyelesaikan ini.
Saya mendapatkan:
PRAGMA /tmp/enum.c /^#define PRAGMA(/;" d file:
foo /tmp/enum.c /^int foo() {$/;" f
main /tmp/enum.c /^void main(void) {$/;" f
Komentar yang paling membantu
Saya tidak tahu triknya tetapi parse baru menyelesaikan ini.
Saya mendapatkan: