Comment puis-je empêcher mon "inutilisé" variables globales être compilé en sortir?

Je suis à l'aide d'initialisation statique pour faciliter le processus d'enregistrement de certaines classes, avec une usine en C++. Malheureusement, je pense que le compilateur optimisant les "inutilisé" des objets qui sont censés faire le travail utile dans leurs constructeurs. Est-il possible de dire au compilateur de ne pas optimiser une variable globale?

class SomeClass {
    public:
        SomeClass() {
            /* do something useful */
        }
};

SomeClass instance;

Mon point d'arrêt dans SomeClass constructeur de ne pas se faire frapper. Dans mon code, SomeClass est dans un fichier d'en-tête de l'instance et est dans un fichier source, plus ou moins seul.

EDIT: Comme deviné par KJAWolf, ce code est compilé en static lib, pas l'exécutable. Son but est d'enregistrer certains types fournis par la lib statique avec une liste statique des types et de leurs créateurs, pour une usine de lire ensuite de la construction. Étant donné que ces types sont fournis avec la lib, ajoutez ce code à l'exécutable n'est pas souhaitable.

Aussi j'ai découvert qu'en déplaçant le code dans un autre fichier source qui contient du code existant, il fonctionne très bien. Il semble que le fait d'avoir un fichier purement composé de ces objets globaux est ce qui est à l'origine du problème. C'est comme si que l'unité de traduction a été totalement ignoré.

  • Est de votre fichier source une partie de l'exécutable, ou fait-il partie d'une bibliothèque statique?
  • Aha, bon la divination de travail. En fait le fichier source est partie d'une lib statique. Serait-ce causer un problème? Je suis à 80% que j'ai fait exactement la même chose avant et il est travaillé.
  • j'ai eu le même problème: stackoverflow.com/questions/599035/...
  • J'ai eu aussi! Putain!
  • Pourquoi êtes-vous en utilisant une variable globale?
  • Comme je l'ai dit, afin d'exécuter du code lors de la phase d'initialisation statique, pour inscrire une classe avec une usine. J'ai pris la décision consciente d'utiliser à cette fin, dans le cas où cela conduit, dans un amphithéâtre 🙂 La raison pour laquelle je vais avoir de la difficulté, c'est que je suis un bon programmeur, donc je n'ai jamais vraiment utiliser et ne comprennent pas pourquoi ils ne travaillent pas que j'attends!

InformationsquelleAutor Ben Hymers | 2009-08-04