Uso l'inizializzazione statica per semplificare il processo di registrazione di alcune classi con una factory in C++. Sfortunatamente, penso che il compilatore stia ottimizzando gli oggetti "inutilizzati" che sono pensati per fare il lavoro utile nei loro costruttori. C'è un modo per dire al compilatore di non ottimizzare una variabile globale?Come impedire la compilazione delle variabili globali "non utilizzate"?
class SomeClass {
public:
SomeClass() {
/* do something useful */
}
};
SomeClass instance;
Il mio punto di interruzione nel costruttore di SomeClass non viene colpito. Nel mio codice attuale, SomeClass si trova in un file di intestazione e l'istanza si trova in un file di origine, più o meno solo.
EDIT: Come indovinato da KJAWolf, questo codice è in realtà compilato in una lib statica, non nell'eseguibile. Il suo scopo è quello di registrare alcuni tipi forniti anche dal lib statico con una lista statica di tipi e i loro creatori, per una fabbrica da leggere in costruzione. Poiché questi tipi sono forniti con la lib, non è desiderabile aggiungere questo codice all'eseguibile.
Inoltre, ho scoperto che spostando il codice su un altro file sorgente che contiene un altro codice esistente, funziona correttamente. Sembra che avere un file composto esclusivamente da questi oggetti globali sia ciò che sta causando il problema. È come se quell'unità di traduzione fosse completamente ignorata.
Il file sorgente è parte dell'eseguibile o fa parte di una libreria statica? – KJAWolf
Aha, buon lavoro di divinazione. In realtà il file sorgente fa parte di una lib statica. Ciò causerebbe un problema? Sono sicuro all'80% di aver fatto la stessa identica cosa prima e che ha funzionato. –
Ho avuto lo stesso problema: http://stackoverflow.com/questions/599035/force-visual-studio-to-link-all-symbols-in-a-lib-file – Lodle