C++ 有没有办法在make命令中找到未使用的定义和结构

C++ 有没有办法在make命令中找到未使用的定义和结构,c++,struct,refactoring,unused-variables,C++,Struct,Refactoring,Unused Variables,我有一个巨大的项目,我正在重新分解,有很多define语句我正在更改为enum,定义我也在一个公共文件中更改为const变量 当我重新分解时,我发现一些定义在子类标题中重复。 一些定义和结构甚至没有被使用,也没有被使用 我如何让编译器指出它们,比如当编译器显示未使用的变量时 我想搭他们的车 现在我将它们注释掉,并手动查找需要的内容!还有其他方法吗?我讨厌在一个大的.h文件中定义contant。因此,我找到了一种通过C++类型系统定义CONTANT的方法。这是我两年前的作品 -----------

我有一个巨大的项目,我正在重新分解,有很多define语句我正在更改为enum,定义我也在一个公共文件中更改为const变量

当我重新分解时,我发现一些定义在子类标题中重复。 一些定义和结构甚至没有被使用,也没有被使用

我如何让编译器指出它们,比如当编译器显示未使用的变量时

我想搭他们的车

现在我将它们注释掉,并手动查找需要的内容!还有其他方法吗?我讨厌在一个大的.h文件中定义contant。因此,我找到了一种通过C++类型系统定义CONTANT的方法。这是我两年前的作品

------------------------------------------------------
id_system.h
------------------------------------------------------
#pragma once
template<int N>
struct ID_FACTORY{
    enum {_ID=N};
    static const unsigned int m_duplicate_checker; 
};

#define ID_DECLARE(classname, number) \
struct classname{ \
    typedef ID_FACTORY<number> MYID_TYPE; \
    static const unsigned int ID; \
}; \
------------------------------------------------------
a.h 
------------------------------------------------------
#pragma once
#include "id_system.h"
ID_DECLARE(WM_MESSAGE_JJ,1003)
ID_DECLARE(WM_MESSAGE_KK,1002)
------------------------------------------------------
b.h
------------------------------------------------------
#pragma once
#include "id_system.h"
ID_DECLARE(WM_MESSAGE_PP,2013)
ID_DECLARE(WM_MESSAGE_TT,2014)
ID_DECLARE(WM_MESSAGE_VV,2015)

------------------------------------------------------
id_system.cpp
------------------------------------------------------
#define ID_CHECKER(classname) \
const unsigned int classname::MYID_TYPE::m_duplicate_checker=classname::MYID_TYPE::_ID; \
const unsigned int classname::ID = classname::MYID_TYPE::m_duplicate_checker; \


#include "a.h"
#include "b.h"

ID_CHECKER(WM_MESSAGE_KK)
ID_CHECKER(WM_MESSAGE_JJ)
ID_CHECKER(WM_MESSAGE_PP)
ID_CHECKER(WM_MESSAGE_TT)
ID_CHECKER(WM_MESSAGE_VV)

------------------------------------------------------
main.cpp
------------------------------------------------------
#include "a.h"
void main(){

    int x = WM_MESSAGE_KK::ID;
    int y = WM_MESSAGE_JJ::ID;
}
------------------------------------------------------
id_系统.h
------------------------------------------------------
#布拉格语一次
模板
结构ID_工厂{
枚举{u ID=N};
静态常量无符号整数m_重复检查程序;
};
#定义ID_声明(类名、编号)\
结构类名称{\
typedef ID_工厂MYID_类型\
静态常量无符号整数ID\
}; \
------------------------------------------------------
a、 h
------------------------------------------------------
#布拉格语一次
#包括“id_system.h”
ID_声明(WM_消息_JJ,1003)
ID_声明(WM_消息_KK,1002)
------------------------------------------------------
b、 h
------------------------------------------------------
#布拉格语一次
#包括“id_system.h”
ID_声明(WM_消息_PP,2013)
ID_声明(WM_消息_TT,2014)
ID_声明(WM_消息_VV,2015)
------------------------------------------------------
id_system.cpp
------------------------------------------------------
#定义ID_检查器(类名)\
常量unsigned int classname::MYID\u TYPE::m\u duplicate\u checker=classname::MYID\u TYPE::\u ID\
常量unsigned int classname::ID=classname::MYID\u TYPE::m\u duplicate\u checker\
#包括“a.h”
#包括“b.h”
ID_检查器(WM_消息_KK)
ID_检查器(WM_消息_JJ)
ID_检查器(WM_消息_PP)
ID_检查器(WM_消息_TT)
ID\U检查器(WM\U消息\U VV)
------------------------------------------------------
main.cpp
------------------------------------------------------
#包括“a.h”
void main(){
int x=WM_MESSAGE_KK::ID;
int y=WM_MESSAGE_JJ::ID;
}
优点: 1) 它可以检测重复的id 2) 客户端代码(如main.cpp)不需要包含一个大的.h文件。
3) 编译时间大大缩短,因为将
#define
更改为枚举和常量时对.h文件的依赖性最小。但是,它无法检测未使用的结构