【发布时间】:2010-01-03 04:05:46
【问题描述】:
有时当 gcc 输出错误时,会通过 -E、-S 和 -c 等选项将预处理、编译、组装、链接的每个阶段的过程分解。这里是an example。
我只是想知道这四个阶段中的每一个阶段都会发生哪些类型的错误,如果在其中一个阶段发生了一个错误,但在之前的阶段没有,这将如何指导您找到错误的原因并纠正吗?
【问题讨论】:
标签: gcc assembly compilation linker c-preprocessor
有时当 gcc 输出错误时,会通过 -E、-S 和 -c 等选项将预处理、编译、组装、链接的每个阶段的过程分解。这里是an example。
我只是想知道这四个阶段中的每一个阶段都会发生哪些类型的错误,如果在其中一个阶段发生了一个错误,但在之前的阶段没有,这将如何指导您找到错误的原因并纠正吗?
【问题讨论】:
标签: gcc assembly compilation linker c-preprocessor
如果我记得每个术语的含义:
预处理错误:`abcdefg' 不是有效的关键字,因此预处理将失败:
#abcdefg
编译错误:`fight!now' 不是有效标识符,因此编译将失败:
int fight!now;
链接错误:`myfunc' 声明为从未定义:
extern int myfunc();
int main() {
return myfunc();
}
您知道,了解工具链检测到错误的位置有助于了解可能是哪种错误。但通常工具链发出的消息足以了解错误所在。当然,它需要习惯于将参数传递为 -Wall 甚至 -Wextra 以获得更多关于可能出现问题的警告。
【讨论】: