C 和 C 之间有效代码的行为差异
虽然 C 和 C 有许多相似之处,但在某些情况下,两者中的有效代码都存在在各自的语言中编译时,语言可以产生不同的结果。
函数调用和对象声明
其中一个场景与函数调用和对象声明的差异有关。在C90中,无需事先声明即可调用函数。然而,在 C 中,不允许使用未声明的函数。这种区别可能会导致编译以下代码时出现不同的行为:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
在 C 中,此代码不会打印任何内容,因为创建并销毁了类型 f 的临时对象,导致 x 成员丢失。然而,在 C90 中,它会打印“hello”,因为函数无需声明即可调用。
消除名称歧义
另一点需要注意的是使用示例代码中的名称 f。 C 和 C 都允许对函数和结构使用相同的名称。要在 C 中创建对象,必须显式指定 struct f。如果省略 struct 关键字,代码将被解释为函数调用。这种区别与调用约定的差异相结合,导致了在用 C 和 C 编译代码时观察到的不同行为。
以上是为什么相同的代码在 C 中打印'hello”,而在 C 中什么也没有打印?的详细内容。更多信息请关注PHP中文网其他相关文章!