编译的哪个阶段是"多次符号定义"报道?

时间:2014-09-03 01:14:34

标签: c

编译运行时,哪些阶段可以报告错误"符号多次定义"?

预处理器,编译器,汇编器,链接器,可执行文件?

3 个答案:

答案 0 :(得分:1)

这很难过......为了免除你的羞辱,我会给你答案。它是链接器。

答案 1 :(得分:1)

使用符号名称的每个阶段都可以报告此错误:

  • 预处理器将报告宏的重新定义,
  • 编译器将报告本地的重新定义,struct中的字段和外部范围中的静态符号,
  • 链接器将报告外部函数和变量的重新定义。

答案 2 :(得分:0)

由于出现了不同意见的答案,我想我也应该为我做出贡献。

我认为答案在某种程度上取决于你想要多大程度地定义"符号"。如果定义仅包含符号表中的条目,则答案将是链接器和汇编器;链接器尝试链接包含相同符号的多个目标文件时,以及汇编程序尝试从组件源生成符号表时尝试创建相同的符号两次。

如果在定义中还包含生成符号的源代码构造,而不是符号本身(这将是合理的),那么编译器也必须被包括在内,因为它可以自由地(并且几乎总是如此)确实会导致多个定义出错,导致相同的符号。我认为C编译器通常会用"多个定义"来表示产生的错误。而不是"多个符号"然而。所以这是一个定义问题。

那么我认为,答案应该是"编译器,汇编器和链接器"。