gpt4 book ai didi

c++ - extern "C"不允许 C header 使用 C++ 保留字

转载 作者:行者123 更新时间:2023-11-30 20:00:08 25 4
gpt4 key购买 nike

我正在尝试构建一个 Apple 开源驱动程序堆栈,即 IOGraphicsFamily。

#includes一些xnu内核头文件。这些都是 C 语言,但 C++ 代码使用 extern "C" 保护它们。但是,我在所有 C++ 关键字(例如 privatenew)上遇到编译错误。

我在 google 中查找了 C 关键字,但没有找到 privatenew 列出。但是以下代码无法编译:

bar.cpp:3:13: error: expected unqualified-id
typedef int new;
^
bar.cpp:6:2: error: expected member name or ';' after declaration specifiers
new private;
^

extern "C" {

typedef int new;

typedef struct _bar {
new private;
} bar;

}

int main( int argc, char **argv )
{
bar foo;

return (int)&foo;
}

修改 xnu 代码库中的所有 C++ 关键字是很棘手的。

Apple 能够构建 IOGraphicsFamily;这让我怀疑我做错了什么,但我还没有获得所需的洞察力。

最佳答案

extern "C" does not enable C headers to use C++ reserved words

没有人说会。 extern "C" 本质上影响编译器/链接器如何执行相关函数的查找和/或调用;解析规则不受影响。

我看到的唯一出路是一些丑陋的#define技巧,例如在包含之前#defining相关关键字到其他内容,并在包含之后立即#undefining它们(这可能不起作用如果此类标识符引用外部符号),或者将需要这些 header 的程序部分编译为纯 C,并可能使用它与 C++ 程序的其余部分形成“桥梁”。

关于c++ - extern "C"不允许 C header 使用 C++ 保留字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47517263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com