在C+中包含C头+;重游 我刚刚阅读了一段讨论的场景,其中一段代码在C和C++中都是有效的,但是在每个语言中都会产生不同的行为。 这引出了一个问题:当C++代码中包含C标头时,这是否是个问题?< /强>
我知道您应该包括这样的C头:在C+中包含C头+;重游 我刚刚阅读了一段讨论的场景,其中一段代码在C和C++中都是有效的,但是在每个语言中都会产生不同的行为。 这引出了一个问题:当C++代码中包含C标头时,这是否是个问题?< /强> ,c++,c,header-files,extern,C++,C,Header Files,Extern,我知道您应该包括这样的C头: extern "C" { #include <your_os_or_library_header_in_c.h> } extern“C”{ #包括 } 但到目前为止,我所发现的只是外部代码“C”只能保证名称混乱被关闭 < >我找不到任何信息,它是否将所有语句作为C来计算,因此例如“代码> SIEZOF(A')或 10 //*注释*/2 < /C> >(在内联函数中可以找到)被解析为C而不是C++。(请注意,依赖于编写C头这样的行为显然是个坏主意,但我
extern "C" {
#include <your_os_or_library_header_in_c.h>
}
extern“C”{
#包括
}
但到目前为止,我所发现的只是外部代码“C”只能保证名称混乱被关闭
< >我找不到任何信息,它是否将所有语句作为C来计算,因此例如“代码> SIEZOF(A')<代码>或<代码> 10 //*注释*/2 < /C> >(在内联函数中可以找到)被解析为C而不是C++。(请注意,依赖于编写C头这样的行为显然是个坏主意,但我是从纯学术的角度来问这个问题的,“如果呢?”)
<> P> < C++ > C++中的C++标准称,在#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
inline void putsizeofchar()
{
printf("%zd\n", sizeof(char));
}
#ifdef __cplusplus
}
#endif
int main()
{
putsizeofchar();
return 0;
}
#包括
#ifdef_uucplusplus
外部“C”{
#恩迪夫
内联void putsizeofchar()
{
printf(“%zd\n”,sizeof(char));
}
#ifdef_uucplusplus
}
#恩迪夫
int main()
{
putsizeofchar();
返回0;
}
由于两种语言中的报头包含都是文本替换,所以缺少一个头没有任何区别。
无论哪种方式,如果C报头声明了一个符号,例如“代码>新< /Cord>”,这将无法在C++中编译。谢谢。我或许应该补充一个问题:“这在现实世界中会成为一个问题吗™?" 或者,OS或库头的任何明智的开发者都会避免这些问题,并确保它在C和C++中都产生相同的行为?@ AlcBeNDE:在他们的右脑中没有开发者同时编写C和C++程序,而是选择哪种语言来实现,然后使用<代码>外“C”。“以确保它有另一个API。我想你误解了我的评论。我并不是在讨论同时编写C和C++的程序,而是用它们在C和C++中生成文档行为的方式编写接口的头文件(即,没有内联函数来完成您在示例中所做的操作)。@ AlecBender:我把内联函数放在很多C++标题中:)但是如果你想通过一个头来实现C/C++互操作,那么除了标题“<代码>外”“C”<代码>之外,确保标题是纯C的,并将其包含在实现它的C++模块中,以确保它们被正确编译。谢谢。我或许应该补充一个问题:“这在现实世界中会成为一个问题吗™?" 或者,OS或库头的任何明智的开发者都会严格避免这些问题,并确保头本身在C和C++中都产生相同的行为吗?