__cplusplus宏告诉 g++ C 标头声明工作不奇怪
__cplusplus macro to tell g++ about C header declarations not working strangely
我混合了C C++代码。全部用 g++ 编译。无论我在哪里有 C 标头,我都会包含头文件的内容
#if defined(__cplusplus)
extern "C" {
#endif
和
#if defined(__cplusplus)
extern "C" {
#endif
但是在一个 C 头文件中,我收到 g++ 编译错误,我不小心使用了参数名称作为模板,这显然是不正确的,并且与 c++ 关键字模板冲突。
我知道我可以去更改这个参数名称,但我在想为什么这个extern "C"
声明不起作用,为什么头文件被视为C++代码而不是我想要的 C。
g++ 版本 4.1.1 Linux Red Hat Enterprise。
extern "C"
仅告诉编译器
最好的解决方案是重命名冲突的符号。
考虑:
extern "C" {
namespace n
{
int& foo(bool b)
{
if (!b)
throw std::invalid_argument("fail!");
static int i = 0;
return ++i;
}
}
}
这个函数有 C 语言链接,但使用引用、命名空间和异常,我希望这能证明extern "C"
不会神奇地将编译器切换到编译 C,它只是告诉编译器对具有 C 语言链接的函数和变量使用 C 调用约定和符号命名约定(这通常只是意味着它禁用名称重整并导致不同命名空间中的匹配声明引用同一实体。
相关文章:
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 为什么我不能声明一个 constexpr 本地,而一个 const 一个工作?
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 使赋值运算符在声明上工作
- 友元类不工作 C++ 、'class T'阴影模板参数的声明
- void(*var_name)(data_type) - 该声明如何工作
- 当通过声明表达式调用时,static_assert应该可以工作
- 功能仅声明,但仍在工作
- 我如何使用关系 btwn 3 整数来确定三角形和/或我可以使用什么声明来使这个程序工作
- __cplusplus宏告诉 g++ C 标头声明工作不奇怪
- 这C++模板成员函数声明如何工作
- 隐式声明(对象级)成员函数如何根据 ISO C++11 标准工作
- 即使在使用函数之前没有函数声明,C++ 程序也可以工作
- 在正向声明的情况下,编译器是如何工作的,Makefile是如何发挥作用的
- 类数组是如何工作的(c++)?它在声明时得到内存吗
- 数组声明如何在C++中工作
- glActiveTesture和GL_TEXTURE0不工作,都是未声明的标识符
- 如何使这些c++类声明工作