Domanda

Sto usando VS2008 per un progetto C ++. Il codice è piuttosto vecchio ed è passato attraverso molte mani. Esistono diverse gerarchie di classi, funzioni, enum e così via che non vengono più utilizzate.

Esiste un modo per indurre il compilatore / linker a elencare gli identificativi che sono stati dichiarati o definiti ma a cui non si fa riferimento da nessuna parte?

È stato utile?

Soluzione

PC-Lint "intero progetto" L'analisi (che analizza più file insieme) può farlo. Non esitate a contattarmi se hai bisogno di aiuto per configurarlo.

Altri suggerimenti

VS avvertirà degli identificatori dichiarati all'interno di una funzione e non utilizzati, potrebbe essere necessario passare al livello di avviso 4, ma per le variabili globali e una caccia per molti altri potenziali problemi, faresti bene a provare lint o lint visivo

Non sono sicuro di Visual C ++, ma g ++ avverte delle variabili non utilizzate. Puoi provare a passare il tuo codice attraverso g ++.

PC-Lint lo farà. Tuttavia, non eseguirlo con tutto uno. Ho fatto e ho avuto 1,2 milioni di errori - che equivalevano a ~ 5 per riga. Ciò è stato notevolmente migliorato perché quasi tutte le classi dell'interfaccia utente hanno fatto riferimento a risorse.h e risorse.h elencano molte #define alle quali lint dice "sostituisci definisce con const int". Per un buon punto di partenza leggi questo post sul blog Power of 2 .

Per le dichiarazioni più inutilizzate più ovvie, un alto livello di guerra si occuperebbe della questione.

Per quanto riguarda l'identificazione di pezzi di codice inutilizzati, il deadstripper (non essendo il centro di un dramma criminale a tarda notte, ma il meccanismo che abbatte il codice inutilizzato durante il collegamento) ti farà solo parte del percorso - quello che vuoi davvero è uno strumento di analisi della copertura del codice. Ne esistono molti, purtroppo sono tutti piuttosto costosi.

Sarà utile anche un editor robusto con un buon meccanismo di tagging del contesto e di call-graphic.

Con riferimento al post di Graham: FWIW non ho mai visto il "rimpiazzare definito" con const int " messaggio con file resource.h - sebbene alcuni altri (precedentemente definiti nella stessa posizione) possano essere una seccatura.

Indipendentemente da ciò, se un particolare messaggio di PC-Lint sta ostacolando lo spotting di ciò che stai cercando, è semplice spegnerlo usando -e nel tuo file options.lnt. Vale anche la pena conoscere l'opzione -w, che consente di impostare a livello globale il livello di avviso (ad esempio -w0 + e766 disattiva tutto tranne il messaggio 766).

Per simboli e dichiarazioni inutilizzati, ti consigliamo di cercare messaggi come 755 (Informazioni - macro globale non referenziata), 758 (Informazioni - enum globale non referenziata), 769 (Informazioni - costante di enumerazione globale non referenziato) e 1714 (Informazioni - Funzione membro non referenziata). Ricorda che questi vengono eliminati nell'analisi di un singolo file, quindi dovrai eseguire l'intera analisi del progetto per vederli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top