我想找到一些在.h文件中声明的函数的具体定义。问题是我如何才能做到这一点?因为目录中有数百个.c文件。我尝试使用grep命令,它没有高效工作。还有其他方法吗?
我的.h文件:
248 #define EXPAND(a,b,c)a b
我使用vim,所以:
:tag EXPAND
E433:没有标签文件 E426:找不到标签 248等是行号。和433,426与EXPAND无关,一个是空行,另一个是评论部分。
EXPAND是一个宏?我认为这是一个函数,因为它出现在其他.c文件中,如:
u[EN] = EXPAND(v[VX]*v[VX], + v[VY]*v[VY], + v[VZ]*v[VZ])
@didierc是对的,我发现这是一个宏。我对C真的很绿。非常感谢@Basile Starynkevitch提供了追踪功能的方法,这是另一个问题。困惑的我
答案 0 :(得分:4)
将etags
与emacs
一起使用(或者ctags
,例如,如果使用vi
)。而不是grep
考虑使用ack。
详细了解linker(例如Levine's book Linkers & Loaders;详细信息是特定于操作系统的);在Linux上看binutils。请注意,extern
适用于声明,而不适用于函数或变量名称的定义。
不要忘记在ctags
或etags
编辑器中使用代码之前不时运行emacs
或vi
命令。
关于宏:请理解C preprocessor是编译的第一阶段。阅读GNU cpp
的文档。不要期望宏是功能,它们是文本设备!或许使用gcc -Wall -C -E foo.c > foo.i
(还有gcc
的更多选项,例如-I
和-D
个)来获取源文件foo.i
的预处理形式foo.c
};用编辑器查看生成的foo.i
内部。