gpt4 book ai didi

c++ - 在非函数调用相关声明上使用 "extern C"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:02 27 4
gpt4 key购买 nike

我知道之前有人问过有关 extern "C" 的问题,但我收到的信号很复杂,希望有人能指出以下场景中的最佳实践。我已经为 Linux 编写了一个驱动程序,并定义了几个 struct 以及一些 _IO_IOR_IOW ioctl(...) 调用的定义。我的结构都不包含任何函数,下面是我使用的 structenumioctl 示例:

#ifdef __cplusplus
extern "C" {
#endif
enum Alignment
{
Left = 0,
Right = 1,
Middle = 3
};

struct Data
{
int Size;
void* Address;
};

#define foo _IOR(DRV_ID, 1, struct Data*);
#ifdef __cplusplus
}
#endif

我的问题是,我是否需要向此 header 添加 extern "C"? header 在我的驱动程序中定义,该驱动程序是用 C 编写的,并由用 C++ 编写的用户程序使用。我想因为没有成员函数或特定的库函数调用我不需要 extern "C"。另外,在没有 extern "C" 的情况下将我的 enum 更改为以下是否安全:

#ifdef __cplusplus >= 201103L
enum class Alignment
#else
enum Alignment
#endif
{
Left = 0,
Right = 1,
Middle = 3
};

编辑:

我的 header 已经包含在 extern "C" 中。我试图了解不调用函数的项目是否需要这样做,并且名称修改是一个问题。

最佳答案

在标准 C++ 中,extern "C" 仅影响:函数类型、函数名称和变量名称。不要enum 定义。

你的编译器可能会做一些超出标准规定的事情,你必须查阅它的文档。

有条件的 enum class 是个坏主意。您最终可能会发现 enum 在 C 中的大小与在 C++ 中的大小不同,从而导致互操作性问题。这两个标准均未涵盖,但为了实现互操作性,最好确保两种语言使用完全相同的代码,extern "C" 除外。

关于c++ - 在非函数调用相关声明上使用 "extern C",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38175100/

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