使用 ctags 或等效浏览字符串化或其他 C 宏技巧生成的代码

Using ctags or equivalent to browse code generated by stringification or other C macro tricks

我正在从事一个非常大的项目,该项目使用通常不太优雅但很有用的 C 宏字符串化技巧来生成动态符号名称,例如:

#define FUNCTION_NAME(signal) (void Callback_ ## signal ## (void))

我将 ctags 与 vim 或 visual studio 代码或 eclipse 结合使用。但是似乎没有办法能够浏览在预处理阶段生成的名称,我明白为什么。 但是尽管项目很大,有没有办法将 ctags 插入构建过程,以便它可以在构建发生时构建索引。或者任何其他解决此问题的方法。

Universal Ctags 可以扩展命令行中定义的宏。 -D 选项可用于此目的。

$ cat -n /tmp/input.c
     1  FUNCTION_NAME(term)
     2  {
     3    /* Do something */
     4  }
     5  
     6  FUNCTION_NAME(hup)
     7  {
     8    /* Do something */
     9  }
    10  
    11  
$ ~/bin/ctags -D 'FUNCTION_NAME(signal)=void  Callback_ ## signal ## (void)' -o - /tmp/input.c
Callback_hup    /tmp/input.c    /^FUNCTION_NAME(hup)$/;"    f   typeref:typename:void
Callback_term   /tmp/input.c    /^FUNCTION_NAME(term)$/;"   f   typeref:typename:void

另见 https://docs.ctags.io/en/latest/man/ctags.1.html#language-specific-options