以下编译无错误:
\nextern "C" void func( void );\nextern void func( void );\nRun Code Online (Sandbox Code Playgroud)\n如果我改变声明的顺序,
\nextern void func( void );\nextern "C" void func( void );\nRun Code Online (Sandbox Code Playgroud)\n我收到编译器错误:conflicting declaration of \xe2\x80\x98void func()\xe2\x80\x99 with \xe2\x80\x98C\xe2\x80\x99 linkage。
\nC++ 标准说:
在这两种情况下,它是相同的功能。我的假设是 C++ 编译器在内部存储它将编译的函数签名。在第一个示例中,编译器认为第二个声明有效并使用第一个声明进行编译。在第二个例子中,情况并非如此。它将两个声明重新评级为不同的声明。
\n其背后的技术细节是什么?
\ngcc 9.4.0 和 msvc 19.29.30147
| 归档时间: |
|
| 查看次数: |
3407 次 |
| 最近记录: |