C - 我用什么选项来制作列表文件?

时间:2012-04-27 02:16:59

标签: c gcc

我是C编程语言和gcc的新手。

我正在尝试破译一个相当复杂的C程序。我想阅读一个有用的列表文件而不是源文件。

我正在寻找由gcc编译器创建的列表文件,其中包含:

  1. 所有包含的源代码
  2. xref =交叉引用列表
  3. 引用变量声明的位置。例如,如果该行包含i++;,则会声明一条说明i的说明。
  4. 我搜索了这个,但是gcc有很多选择,我迷路了。

    如果有更好的地方提出我的问题,请告诉我。

5 个答案:

答案 0 :(得分:2)

你没有。您使用单独执行列表的程序。编译器必须知道打印也很愚蠢。

我建议a2ps。要进行交叉引用,请查找cxref

答案 1 :(得分:2)

我理解你的困境。多年前,我试着做你正在做的事,但最终我放弃了。虽然一个字面意思可以做到这一点,但结果会将相关代码淹没在与手头问题无关的大量代码中,以至于无用。

我担心您将不得不学习如何以C语言阅读C代码。如果代码很复杂,并且你是初学者,那么 - 目前 - 你可能已经过头了。

如果你想尝试它,那么看一下源的几个* .h“header”文件的名称。选择三个或四个头文件,您可能会解决问题的核心部分。首先阅读这些文件。从那里扩大阅读范围。这是不容易的,直到你摆脱它。

祝你好运。

答案 2 :(得分:2)

一种不同的方法。如果您使用ie Vim,则在代码上运行cscope。

例如,我有 Ctrl + \ 作为cscope触发器。如果我在一个职能部门:

01 #define SOME_BLAH 33
02 
03 void foo() {
04     printf("%d\n", SOME_BLAH); /* <- cursor on SOME_BLAH; 
05                                   trigger + G jumps to line 1 */
06 }
07 
08 void bar() {
09     foo(); /* <- Cursor on foo I hit trigger, G and I jump to line 3 */
10 }

同样,你可以跨文件跳转到包含,调用特定函数的列表函数,函数调用的列表函数,列出包含文件的文件,跳转到定义变量的位置等等。所有这些都在几个键击中

每次跳转都会添加到LIFO堆栈中, Ctrl t 会将其返回到我输入最后一个跳转命令的位置。


另外添加ie Taglist并在窗口一侧获得一个列表,其中所有定义,变量,函数等都按列表排序。


另一种选择是使用ie -ggdb编译代码并在类似Code :: Blocks的IDE中运行它,使用DDD等 - 并在代码作为进程运行时逐步执行。可以很有教育意义。


答案 3 :(得分:1)

要回答问题#1,可以通过使用gcc -E查看预处理器输出来查看所有包含的源代码。但是,该代码可能更难以理解,因此它可能并不是您真正想要的,尽管我发现它在某些情况下对我需要做的事情很有用。

答案 4 :(得分:1)

嗯,我老了,OP需要的是预处理器输出,是的,它可以比IDE更具启发性。预处理器处理所有#语句,如#include和#ifdef。因此它向您展示了最终成为编译器输入的内容。 g ++手册页解释了4个步骤:         预处理,编译,汇编和链接

然后继续解释可以在任何时候停止序列。然后在“预处理器选项”下,解释了控制它的方法。正如另一篇文章所说,-E会做到这一点,但这只是答案的一部分。为了更好地控制,请使用-f系列选项,例如-fdirectives-only。所以可能OP想要的是:

    gcc  -E  -fdirectives-only  -o MySrc.lst  MySrc.cpp

对于那些使用C ++的人,我建议直接使用g ++:

    g++  -E  -fdirectives-only  -o MySrc.lst  MySrc.cpp

然后在MySrc.lst中找到所需的列表