我遇到了eclipse CDT的问题。 我在哪里使用C FatFs库的C ++项目。我正在尝试实现fatfs文件。 问题:在多个文件中我正在添加
#ifdef __cplusplus
extern "C"
{
#endif
// code..
#ifdef __cplusplus
}
#endif
包装。但由于某种原因,在一个.h文件中定义了_cplusplus,而在另一个.h文件中,未定义__cplusplus
。
有什么建议吗? 可以发送截图进行澄清。
答案 0 :(得分:2)
是否定义__cplusplus
取决于如何编译包含标头的文件。如果文件正在编译为C源(.c
),则不会对其进行定义。如果文件被编译为C ++源代码(.cpp
,.cc
或任何其他与C ++源文件关联的扩展名),则将定义__cplusplus
。
仔细检查文件扩展名,并在必要时检查项目中的设置,以确保正确编译文件。
答案 1 :(得分:1)
请看这里:Combining C++ and C — how does #ifdef __cplusplus
work?
extern "C"
并没有真正改变编译器读取的方式 码。如果你的代码在.c文件中,它将被编译为C,如果是的话 在.cpp文件中,它将被编译为C ++(除非你做某事 你的配置很奇怪。)
extern "C"
的作用是影响联系。 C ++函数在编译时, 他们的名字被破坏了 - 这就是使重载成为可能的原因。 函数名称根据类型和数量进行修改 参数,以便具有相同名称的两个函数 不同的符号名称。
extern "C"
内的代码仍然是C ++代码。有限制 您可以在extern "C"
块中执行哪些操作,但它们都是关于链接的。
此外,您可能需要两个 #ifdef __cplusplus
s:
#ifdef __cplusplus
extern "C" {
#endif
// ...
#ifdef __cplusplus
}
#endif
否则,您的C代码将永远不会看到您的定义。