![]() |
1
4
我认为另一个问题的答案会更有启发性。对未定义行为的恐惧在于使用不同编译器时无法保证相同的运行时结果。所以: 我不需要一条错误消息来确保运行时行为不依赖于所使用的编译器吗? 不,有两个案例需要考虑。
第一种情况:
编译器将替换
第二种情况:
编译器不替换
因此,理论上,在切换编译器时可能会有一些困难,但不是典型的未定义行为的模糊错误。 如果有些人没有发现这个答案有启发性,我现在回到原来的问题,重新措辞了一点。 当发生这种违反一个定义规则的情况时,是否有任何标志可用于强制诊断消息(错误或警告)? 取决于编译器,但可能不是。请注意,[basic.def.odr]/10提到“不需要诊断”,因此当发生这种特定的冲突时,不需要编译器提供诊断消息。为什么不?可能是因为上述原因:消息将在稍后的阶段触发(即链接),或者预期的行为将发光。在这种情况下,通过要求错误/警告来增加编译器的簿记负担是没有好处的。 |
![]() |
2
1
编译器可能没有使它失败的选项,因为编译器只检查语言,而语言允许这样做。
这个
链接器
将有一个使其失败的选项,您可以通过大多数编译器将选项传递给链接器,包括
这就产生了错误
你没有要求,但是
更详细的是:
试一试。 |
![]() |
Xirema · 如何正确编写运算符的R值重载 7 年前 |
![]() |
Mário Feroldi · 在运行时调用代码中未调用的函数 7 年前 |
![]() |
chqrlie · 所有位0都可以是整数的陷阱表示吗? 7 年前 |
![]() |
Vincent · 打印零,但不基于该条件退出循环 7 年前 |
![]() |
Dror K. · 用%p打印空指针是未定义的行为? 7 年前 |
![]() |
Bite Bytes · C中允许这种函数调用吗 7 年前 |
![]() |
K J Gor · C中strncpy的内存混淆 8 年前 |