如何使用C++编译器/链接器/技巧来检测已分配但以后从未引用的值

How to use the C++ compiler/linker/trick to detect a value that is assigned but never subsequently referred to?

本文关键字:分配 引用 检测 编译器 C++ 何使用 链接      更新时间:2023-10-16

我想创建一个singleton类,称其为global_references,其中包含一堆缓存的全局值。singleton类代码将从一组表中自动生成。一般方案是这样的:

global_references.h

struct global_references
{
    some_type value1;
    some_type value2;
    some_type value3;
    ...
    static const global_references& instance();
};

假设global_references::instance()初始化各种valueN变量并返回singleton实例。然后,各种客户端将在自己的代码中使用缓存的值:

some_translation_unit.cpp

...
x = global_references::instance().value1;

我担心的是,我会将项目添加到用于生成自动生成的global_references类的表中,但随着时间的推移,它们生成的一些符号将变得过时,并停止在程序中使用。我想知道什么时候会发生这种情况,最好让编译器或链接器抱怨一个未使用的符号,或者一个已分配但从未使用过的值。这将提醒我从表中删除相应的项目。我也对任何其他合理简单的解决方案持开放态度。

我在Windows上使用MinGW[g++4.6.2]。

已考虑的选项

我曾想过让成员函数返回值,但-Wunused-function编译器选项仅适用于静态函数,而我需要global_references是一个模块化组件,可以包含在任何翻译单元中。

使用-Wunused但设置变量,或者为了获得更广泛的效果,使用-Wunised或-Wall。

我不确定我是否理解你的目的。因此,每次向表中添加项后,您将重新编译项目代码,以查找编译警告未使用的内容。这听起来是一种效率低下的方式。