Ale*_*der 6 c c++ header-files extern
我刚刚阅读了一个关于SO讨论场景的问题,其中一段代码在C和C++中都有效,但会在每种语言中产生不同的行为.
这引出了一个问题:在C++代码中包含C头时,这可能是一个问题吗?
我从这个问题中知道你应该包含这样的C头:
extern "C" {
#include <your_os_or_library_header_in_c.h>
}
Run Code Online (Sandbox Code Playgroud)
但到目前为止我发现的只是extern"C"只能保证关闭名称.
我找不到任何有关它是否将所有语句评估为C的信息,因此eg sizeof('a')或10 //* comment */ 2(您可以在内联函数中找到)被解析为C而不是C++.(请注意,依赖于编写C头的人这样的行为显然是一个坏主意,但我从纯粹的学术角度问"如果会怎么样?".)
C++标准是否说包含一段代码extern "C"意味着其中的所有语句都必须解析为C?
extern "C"是一个C++结构,它影响C++程序中的语言链接.它不会以任何方式将语言切换为C. extern "C"声明中的所有源文本仍然被解析为C++和C++.
请注意,extern "C"影响的不仅仅是名称修改 - 例如,(理论上)C和C++语言链接的函数可能具有不同的调用约定.