编译运行时,哪些阶段可以报告错误"符号多次定义"?
预处理器,编译器,汇编器,链接器,可执行文件?
答案 0 :(得分:1)
这很难过......为了免除你的羞辱,我会给你答案。它是链接器。
答案 1 :(得分:1)
使用符号名称的每个阶段都可以报告此错误:
struct
中的字段和外部范围中的静态符号,答案 2 :(得分:0)
由于出现了不同意见的答案,我想我也应该为我做出贡献。
我认为答案在某种程度上取决于你想要多大程度地定义"符号"。如果定义仅包含符号表中的条目,则答案将是链接器和汇编器;链接器尝试链接包含相同符号的多个目标文件时,以及汇编程序尝试从组件源生成符号表时尝试创建相同的符号两次。
如果在定义中还包含生成符号的源代码构造,而不是符号本身(这将是合理的),那么编译器也必须被包括在内,因为它可以自由地(并且几乎总是如此)确实会导致多个定义出错,导致相同的符号。我认为C编译器通常会用"多个定义"来表示产生的错误。而不是"多个符号"然而。所以这是一个定义问题。
那么我认为,答案应该是"编译器,汇编器和链接器"。