我正在编译一个 C++ 应用程序,它使用带有 GCC 4.7 的 C 库。
当我编译时,我收到以下警告:
warning: non-local variable ‘const ptg_t param’ uses anonymous type
warning: ‘typedef const struct<anonymous> ptg_t’ does not refer to the unqualified type, so it is not used for linkage
为什么 C++ 将其视为警告,而 C 却没有?
有没有一种方法可以在不更改定义了 ptg_t param
的库头文件的情况下修复它?
最佳答案
C++ 的设计期望实现将类型名称用作错位符号名称的一部分。 C 在设计时并未考虑到这种期望。
这是因为 C 没有函数重载,而 C++ 有。在 C++ 中,您可以拥有具有相同名称的不同实体,因此需要进行名称修改。
所以在 C++ 中,涉及匿名类型的外部是异常的。
首选的修复方法是将 C 代码编译为 C,而不是 C++。然后将它与您的 C++ 程序的其余部分链接起来。当您包含来自 C++ 的 header 时,请执行以下操作:
extern "C" {
#include "headername.h"
}
值得重复:不要将 C 代码编译为 C++。 C 不是 C++ 的子集,而且还有一些有效的 C 程序也是有效的 C++,但它们在 C++ 中的行为与在 C 中的行为不同。C++ 很容易从 C 移植到 C++,但并不完全向后兼容 C。
关于c++ - 非局部变量在 C++ 中使用匿名类型警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16383099/