GCC警告已声明但未定义的变量
GCC warn about declared but undefined variable
我从这些问题中知道,如果我在头文件中声明一个静态常量变量:
Foo
{
public:
static const int BAR = 1234;
...
};
我还必须在源文件中定义它:
const int Foo::BAR;
然而,如果程序中没有使用该变量,it gcc将很乐意忽略此要求。此外,如果启用了优化,gcc似乎很乐意掩盖一些简单的用法(例如通过const引用传递给std::min)。
如果我忘记提供定义,即使在我的源代码中没有使用该变量,有没有办法强制gcc发出警告?如果上面的Foo
是共享库的一部分,并且没有提供Foo::BAR
的定义,则用户将无法通过引用传递Foo:BAR
或获取指向它的指针,但作为库编写器的我没有得到任何指示,表明这是一个问题。
更一般地说,是否有一种方法可以强制共享库中的所有声明都有相应的定义?或者这会在优化机会方面牺牲太多而不值得吗?
您用语言标记了这个问题,所以……代码在技术上是合法的,因为标准只需要在最终程序中使用定义。编译器不知道你是否要链接到另一个定义符号的翻译单元,所以即使生成警告也很棘手,可能会生成误报。
检查的简单方法是正确地对库接口进行单元测试(如注释中所建议的),然后在链接单元测试时就可以确定了。
相关文章:
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- QT C++中对全局变量的未定义引用
- C++ 如何检查 char 变量是否未定义(未初始化)
- 我可以定义一个 constexpr 匿名/未命名变量吗?
- 是否未定义将对函数范围变量的引用作为值返回
- 双循环变量的相等条件:未指定还是未定义
- 为什么 mfc 中静态文本工具中的变量未定义
- 未定义的行为错误:对成员变量的更改仅在某些上下文中可见
- 获取作为类变量的 Deque 大小时未定义的行为
- 标头中的成员变量未定义
- 使用静态变量未解析的外部符号/未定义的引用时出错
- 对成员函数和变量的未定义引用
- 从文件行读取未定义数量的变量
- C++类方法包含对静态变量的未定义引用
- C++ - 对"类::变量"的未定义引用
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- C++动态变量和未定义内存之间的差异
- 未定义对静态变量的引用,没有类
- 这是未初始化的变量使用未定义的行为吗
- 结构数组的未定义 c++ 变量