C++ 使用extern的潜在缺点是什么;C";?

C++ 使用extern的潜在缺点是什么;C";?,c++,extern,C++,Extern,我读过 然而,有一个问题我还没有找到答案:使用extern“C”(例如,在尽可能多的函数上)是否有(潜在的,未来的)缺点 更具体地说:在接口仅使用C功能的函数中添加extern“C”是否有任何缺点;换句话说,那些不使用@k-five的答案中列出的功能的人?缺点是,你只能使用接口中的功能,以外部“C”函数,这些函数也可用于C函数 这意味着: 1.不能对函数参数使用默认值, 2.不能使用引用参数, 3.不能通过值传递C++类(包括智能指针), 4.无法传递enum类参数, 5.如果不将其转

我读过

然而,有一个问题我还没有找到答案:使用
extern“C”
(例如,在尽可能多的函数上)是否有(潜在的,未来的)缺点


更具体地说:在接口仅使用C功能的函数中添加
extern“C”
是否有任何缺点;换句话说,那些不使用@k-five的答案中列出的功能的人?

缺点是,你只能使用接口中的功能,以
外部“C”
函数,这些函数也可用于C函数

这意味着:
1.不能对函数参数使用默认值,
2.不能使用引用参数,
3.不能通过值传递C++类(包括智能指针),
4.无法传递
enum类
参数,
5.如果不将其转换为
int


6.你不能重载这样的函数,可能更多的函数我现在记不起来了。

extern“C”
就是为了达到这个目的而存在的。你的问题的答案取决于你假设它的优点和缺点。缺点是你不能使用C++的东西,比如重载或成员函数。你必须编写更多的代码,而这些代码实际上什么都做不了。尽管它的名字与C语言/标准无关。它是否提到了在没有它的情况下如何调用C-ABI功能?你说的“劣势”是什么意思?如果你买了一辆自行车,你不能用它来运输一架大钢琴,这是一个缺点吗?那不是自行车的用途!不要用螺丝刀敲打钉子。我不认为这是一种优势,因为这就是这个结构的意义所在。(顺便说一句:C有一个布尔类型;转换为
int
)没有用处。@Olaf将所有内容都包装在
extern“C”
中是一个缺点,因为这样你既不是在编写现代C,也不是在编写现代C++这个答案是误导性的。你可以使用C++内部的代码>外部的“C”<代码>函数。你不能做的,就是在声明中使用C++特性。但是在实现中使用
std::vector
没有问题。C++< C++ >代码> BoOL < /C> >与C99 <代码>布尔布尔< /COD>匹配,但他的期望是合理的。这不是缺点,但不是“代码> Extn”C“/CODE”的意思。如果你想编写C代码,使用C编译器,无论如何你不能在C++编译器中编写C代码——不管是否被包裹在<代码>外“C”< /代码>中。事实上,你不能开车飞行并不是街车的缺点,它只是一种财产。不要用螺丝刀敲打钉子。@MSalters:这是C;-)中的
\u Bool