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 元素】
推荐阅读
- 如何下载b站的视频(b站直播404)
- 如何下奶(影响下奶的食物有哪些)
- 如何下围棋(围棋下棋方法)
- 如何上课时集中注意力(一堂课的注意力集中时间)
- 如何上网挣钱(做网上生意的步骤百度经验)
- 如何上好一节体育课(上好一节体育课的要素)
- 蔡思贝|黄宗泽怎么就成不“塌房”的代表?蔡思贝为何被批“三观不正”?
- 如何上国外的网站(怎么进入外网网址)
- 如何上ins(注册ins的辅助工具)
- 如何一分钟快速放屁(躺着容易放屁的姿势)