非局部变量在c++中使用匿名类型警告
non-local variable uses anonymous type warning in C++
我正在编译一个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++中包含头文件时,这样做:
extern "C" {
#include "headername.h"
}
这需要重复:不要将C代码编译为c++。C不是c++的子集,而且还有一些有效的C程序也是有效的c++程序,但它们在c++中所要求的行为与在C中所要求的行为不同。c++很容易从C移植到C,但它并不完全向后兼容C。
相关文章:
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- 将不同类型的模板参数包提取到双精度向量中会产生警告
- 警告:左移计数 >= 在 C++ 中将字节流读取为双精度变量时的类型宽度
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- Clang 对使用的类型别名发出"unused type alias"警告
- 警告:函数使用不带尾随返回类型的'auto'类型说明符
- 编译器在 const ref 类型参数上使用临时对象时是否应该警告不安全的行为?
- MISRA 警告<复杂表达式隐式转换为不同的基本类型>
- 如何警告 C 中 void 指针上的参数不兼容的类型
- 由于非类型模板参数而具有零大小数组的类模板:如何防止警告
- 我的代码错误类型警告 1 警告 C4018 和更多错误
- 如何在代码块 IDE 上修复此警告,警告:按值 [-Wcatch-value=] 捕获多态类型"类 std::d omain_error"
- 编译错误:(警告:控制到达非空函数 [-wreturn 类型] 的末尾)
- 如何处理警告:从较小的整数类型int转换为int*
- 警告:格式"%d"需要类型为"int*"的参数,但参数5的类型为"in
- 为什么我要获得此代码的匿名类型警告
- 不兼容的指针类型警告c
- 非局部变量在c++中使用匿名类型警告
- c++类型警告