Como evitar que minhas variáveis globais "não usadas" sejam compiladas?
Estou usando a inicialização estática para facilitar o processo de registro de algumas classes com uma fábrica em C ++. Infelizmente, acho que o compilador está otimizando os objetos "não usados" que servem para fazer o trabalho útil em seus construtores. Existe alguma maneira de informar o compilador para não otimizar uma variável global?
class SomeClass {
public:
SomeClass() {
/* do something useful */
}
};
SomeClass instance;
Meu ponto de interrupção no construtor de SomeClass não é atingido. No meu código real, SomeClass está em um arquivo de cabeçalho e a instância está em um arquivo de origem, mais ou menos sozinho.
EDIT: Como adivinhado por KJAWolf, esse código é realmente compilado em uma biblioteca estática, não o executável. Sua finalidade é registrar alguns tipos também fornecidos pela biblioteca estática com uma lista estática de tipos e seus criadores, para uma fábrica ler na construção. Como esses tipos são fornecidos com o lib, adicionar este código ao executável é indesejável.
Também descobri que, ao mover o código para outro arquivo de origem que contém outro código existente, ele funciona bem. Parece que ter um arquivo puramente constituído por esses objetos globais é o que está causando o problema. É como se essa unidade de tradução fosse totalmente ignorada.