在 C 和 C 中均有效的代码在特定语言编译器中的表现是否会有所不同?
C 和 C 有许多相似之处,但也存在显着差异存在。这就提出了一个问题:当使用每种语言的特定编译器进行编译时,两种语言的有效代码是否可能表现出不同的行为。
忽略与预处理器相关的黑客行为并假设实现定义方面的一致性,这是出现这种行为差异的一种情况出现的是函数调用和对象声明的处理。
在这种情况下,下面的示例演示了 C 和 C 之间的差异:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
在 C 中,此代码触发创建立即销毁的临时 f 对象。因此,它不会产生任何输出。
相反,C90 允许调用未声明的函数。因此,当使用 C90 编译器编译时,代码将输出“hello”。
这种差异的根源在于 C90 将声明 f() 视为函数调用,而 C 将其解释为f 对象的声明。这种区别突出了细微差别,这些细微差别可能导致不同编程语言的不同行为。
以上是当使用特定于语言的编译器编译时,C 和 C 中的有效代码的行为是否会有所不同?的详细内容。更多信息请关注PHP中文网其他相关文章!