Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中包含C头+;重游 我刚刚阅读了一段讨论的场景,其中一段代码在C和C++中都是有效的,但是在每个语言中都会产生不同的行为。 这引出了一个问题:当C++代码中包含C标头时,这是否是个问题?< /强> _C++_C_Header Files_Extern - Fatal编程技术网

在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头这样的行为显然是个坏主意,但我

我知道您应该包括这样的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++标准称,在“C”/>代码中包含一个代码块意味着它的所有语句必须解析为C</St>

> P> <代码>外“C”<代码>是C++语言结构,它影响C++程序中的语言链接。它不会以任何方式将语言转换为C。所有的源代码在<代码>外部“C”<代码>声明中仍然被解析为C++和C++。 <> >注意>代码>外部“C”/代码>不仅仅影响名称的修改——理论上可能的是,C和C++语言链接的函数可能有不同的调用约定,例如

<代码>外“C”<代码>只更改链接,即MULLUG和可能调用约定。试着用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++中都产生相同的行为吗?