2013-07-19 18 views
5

Ho un progetto enorme che sto re-factoring, ci sono un sacco di definire dichiarazioni che sto cambiando a enumerazioni, definisce che io sono anche cambiando in const variabili in un file comune.c'è qualche modo per trovare definisce non utilizzati e le strutture di comando make

durante la rielaborazione ho rilevato che alcune delle definizioni sono state ripetute nell'intestazione delle sottocategorie. alcune delle definizioni, e le strutture non erano nemmeno usate o usate.

Come posso fare in modo che il compilatore li indichi, come quando il compilatore mostra le variabili inutilizzate?

voglio ottenere giro di loro,

in questo momento io li commento fuori, e trovare ciò che è necessario manualmente! ci sono altri modi

+1

+1 per cambiare '# define' in enumerati e costanti. – Manu343726

risposta

0

Detesto #define contant in un grande file .h. così, trovo un modo per definire contant dal sistema di tipo C++. questo è stato il mio lavoro due anni fa.

------------------------------------------------------ 
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; 
} 

vantaggio: 1) E 'in grado di rilevare duplicato id codice 2) del client (come main.cpp) non deve necessariamente includere un file grande .h. 3) il tempo di compilazione ha ridotto notevolmente il duo alla più piccola dipendenza .h file

+0

ma, non è in grado di rilevare la struttura non utilizzata – thomas