以下是否存在差异:
// c_header.h
void foo(void);
// main.cpp
extern "C" {
#include "c_header.h"
}
void main(void)
{
foo();
}
和
// c_header.h
extern "C" {
void foo(void);
}
// main.cpp
#include "c_header.h"
void main(void)
{
foo();
}
是foo的函数调用而不是c ++受损吗?
答案 0 :(得分:2)
是的,有区别。第一个例子是一个可怕的代码的例子,而第二个是一个正确的方法。
要理解我为什么这么说,请考虑有多少翻译单元可能包含此标题。因为如果你知道一个事实只会有一个,你甚至不需要担心损坏。
但是,如果C编译器也可以看到c_header
,那么extern "C"
指令需要隐藏在#ifdef ___cplusplus
后面。
答案 1 :(得分:1)
没有区别。请记住,#include
由预处理器处理;编译器在编译预处理的main.cpp时会看到完全相同的代码。
P.S。当然,从代码样式/可维护性角度来看,您不希望在#include
中包含extern "C"
。这主要是针对特殊情况保留的,例如当你需要包含第三方纯C头而不修改它时。