知道编译C代码时发生错误的阶段

时间:2013-06-17 08:46:50

标签: c gcc

我正在使用gcc来编译我的C代码。出于好奇,我想知道错误发生在哪个阶段。有没有办法在编译错误发生时打印此信息?

2 个答案:

答案 0 :(得分:2)

正如上面所述,如果您理解了该消息,那么在决定消息的来源(预处理器,汇编器,编译器或链接器)时应该没有问题。但是,要回答您的问题,可以使用传递给gcc的一些编译器选项轻松分离这三个阶段。

您可以尝试的第一个选项是-E。传递-E将在预处理阶段后停止gcc,输出只是预处理的C代码。如果出现错误消息,则由预处理器生成。否则,请继续阅读。

第二个选项是-S。这将在预处理和编译之后但在汇编和链接之前停止GCC。如果您在此阶段看到错误消息,则它由预处理器生成(但您已将其排除在上一步骤中)或编译器。否则,请继续阅读。

尝试的第三个也是最后一个选项是-c。传递-c将要求GCC预处理,编译和汇编源文件,但不要链接。如果在此阶段看到错误消息,则它由预处理器或编译器生成(但您已排除上一步中已有的那些消息)或汇编程序。否则它来自链接器。

答案 1 :(得分:1)

这已经发生了。

#ifedf THIS
    that;
#Endif

$gcc ifed.c
ifed.c:1:2: error: invalid preprocessing directive #ifedf
ifed.c:2:5: warning: data definition has no type or storage class
ifed.c:3:2: error: invalid preprocessing directive #Endif

int main() {
    int int, int;
}

$ gcc mai.c
mai.c: In function ‘main’:
mai.c:2:9: error: two or more data types in declaration specifiers
mai.c:2:12: error: expected identifier or ‘(’ before ‘,’ token

int main() {
    bogusfunction();
}

gcc lin.c
/tmp/ccUc0WAL.o:lin.c:(.text+0xc): undefined reference to `_bogusfunction'
collect2: ld returned 1 exit status