__cplusplus编译器指令已定义且未定义

时间:2015-01-01 00:51:51

标签: c++

我遇到了eclipse CDT的问题。 我在哪里使用C FatFs库的C ++项目。我正在尝试实现fatfs文件。 问题:在多个文件中我正在添加

#ifdef __cplusplus 
extern "C" 
{ 
#endif 

// code..

#ifdef __cplusplus
}
#endif

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

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

2 个答案:

答案 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代码将永远不会看到您的定义。