__cplusplus已定义和未定义的编译器指令

__cplusplus compiler directive defined and not defined

本文关键字:编译器 指令 未定义 cplusplus 定义      更新时间:2023-10-16

我在使用日食CDT时遇到了问题。我有一个使用 C FatFs 库的C++项目。我正在尝试实现 fatfs 文件。问题:在多个文件中,我要添加

#ifdef __cplusplus 
extern "C" 
{ 
#endif 
// code..
#ifdef __cplusplus
}
#endif

包装纸。但由于某种原因,在一个 .h 文件中定义了_cplusplus,而在另一个 .h 文件中未定义__cplusplus

有什么建议吗?
可以发送屏幕截图以进行澄清。

是否定义__cplusplus取决于包含标头的文件的编译方式。如果文件被编译为C源(.c),则不会定义它。如果文件被编译为C++源文件(.cpp.cc 或任何其他与C++源文件相关联的扩展名),则将定义__cplusplus

仔细检查文件扩展名,如有必要,请检查项目中的设置,以确保文件被正确编译。

看这里:结合C++和C——#ifdef __cplusplus是如何工作的?

extern "C"并没有真正改变编译器读取 法典。如果您的代码在 .c 文件中,它将被编译为 C(如果是 在.cpp文件中,它将被编译为C++(除非您执行某些操作 对您的配置很奇怪)。

extern "C"所做的是影响联动。C++函数,编译时, 让他们的名字被篡改 - 这就是使重载成为可能的原因。 函数名称根据 参数,以便两个同名的函数将具有 不同的符号名称。

extern "C"中的代码仍然是C++代码。对 你可以在extern "C"块中做什么,但它们都是关于链接的。

此外,您可能需要两个#ifdef __cplusplus

#ifdef __cplusplus 
extern "C" { 
#endif 
    // ...
#ifdef __cplusplus
}
#endif

否则,您的 C 代码将永远不会看到您的定义。