C++ 不支持的 C 元素( 三 )


static int a; /* Internal linking */void foo(void) {int a; /* Hides external `a`, has no linking */{extern int a;/* Because external `a` is hidden, declare `a` with internallinking. Now `a` is declared with both external and internal linking - conflict */} }在 C++ 中,这样的 extern 声明格式错误 。尽管在 C++ 语言标准中有针对这种异常情况的单独示例,但流行的 C++ 编译器通常不会诊断这种违规情况 。
以下是我认为微不足道、众所周知且无趣的差异示例 。
我将它们包括在这里是为了完整性,因为它们正式满足我的标准:乍一看,代码在 C++ 观察者的眼中看起来或多或少是正常的 。
23. C 语言允许从 void * 类型隐式转换指针:
void *p = 0;int *pp = p;24. 在 C 中,枚举类型的值可以隐式转换为 int 类型或从 int 类型转换:
enum E { A, B, C } e = A;e = e + 1;在 C++ 中,隐式转换只能以一种方式工作 。
25. [C23] C语言支持无原型的函数声明:
void foo(); /* Declaration without prototype */void bar() {foo(1, 2, 3); }26. 在 C 中,嵌套结构类型声明将内部类型的名称放在外部(封闭)范围内:
struct A {struct B { int b; } a;};struct B b; /* Refers to the type `struct B` declared on line 3 */结论事实上,这就是目前积累的全部 。我希望你觉得我的观察很有趣,它们会对某人有所帮助 。你认为我错过了什么重要的事情吗? 请随时留下任何问题、意见或建议 。

【C++ 不支持的 C 元素】


推荐阅读