目录
1、运行预处理器
cflow 可以在分析之前预处理输入文件,与 cc 在编译之前做的工作一样。这样做可以允许 cflow 准确的处理所有的符号声明,这样就避免了使用--symbol 对特使符号做必要的定义。使用--cpp (--preprocess)选项可以使能预处理功能。对我们的样例 d.c,这种模式输出如下:
$ cflow --cpp -n d.c
1 main() <int main (int argc,char **argv) at d.c:85>:
2 fprintf()
3 atoi()
4 printdir() <void printdir (int level,char *name) at d.c:42> (R):
5 getcwd()
6 perror()
7 chdir()
8 opendir()
9 readdir()
10 printf()
11 ignorent() <int ignorent (char *name) at d.c:28>:
12 strcmp()
13 isdir() <int isdir (char *name) at d.c:12>:
14 stat()
15 perror()
16 putchar()
17 printdir()
<void printdir (int level,char *name) at d.c:42>
(recursive: see 4)
18 closedir()
对比这个图和第 5 章没有使用--cpp 选项的结果。就像你看到的一样,S_ISDIR 不见了。宏被展开了。现在试着运行 cflow --cpp --number -i x d.c 并比较与之对应的没有使用预处理的图。你将会看到不使用--symbol 选项也能生成正确的结果。默认情况下--cpp 运行/usr/bin/cpp。如果你希望运行其他预处理命令,可以在参数中用后接等号后的符号指定它。比如,cflow --cpp='c