Lorsque sont statiques et variables globales initialisées?

Dans C++ je sais static et global les objets sont construits avant le main fonction. Mais comme vous le savez, dans C, il n'y a pas ce genre initialization procedure avant main.

Par exemple, dans mon code:

int global_int1 = 5;
int global_int2;
static int static_int1 = 4;
static int static_int2;
  • Quand ces quatre variables initialisé?
  • Où les valeurs d'initialisation comme 5 et 4 sont stockées lors de la compilation? Comment les gérer lors de l'initialisation?

EDIT:

La Clarification de la 2ème question.

  • Dans mon code j'utilise 5 à initialiser global_int1, donc comment le compilateur attribuer 5 à global_int? Par exemple, peut-être que le compilateur premier magasin de la 5 de la valeur à quelque part (c'est à dire un tableau), et d'obtenir cette valeur lors de l'initialisation commence.
  • À "la Façon de les gérer lors de l'initialisation?", il est vraiment vague et j'ai moi-même ne pas savoir comment interpréter encore. Parfois, il n'est pas facile à expliquer une question. L'ignorer, puisque je n'ai pas maîtrisé la question encore.
  • Tous les quatre de vos variables statiques de classe de stockage.
  • Comment static storage class se rapportent à ma question?
  • La classe de stockage détermine le comportement d'initialisation.
  • Similaire discussion intéressante ici stackoverflow.com/questions/898432/...
  • Je sais qu'il existe un procédé d'initialisation avant de maìn en C, car la C les spécifications dit qu'il y a (voir C99 5.1.2/1).
  • Pourriez-vous préciser ce que vous entendez par "la Façon de les gérer lors de l'initialisation"? En tant que programmeur, vous n'avez rien à faire au-delà de la définition d'entre eux, et en fournissant une initialiser si nécessaire.
  • Le C99 5.1.2/1, en effet, dit Tous les objets statiques durée de stockage doit être initialisé (fixés à leurs valeurs initiales) avant le démarrage du programme. Les modalités et le calendrier de ces initialisation sont autrement non spécifié. Mais à la différence de C++ qui définit une fonction nommée _start sous gcc C
  • Comment statique de la classe de stockage de déterminer le processus d'initialisation?
  • C permet uniquement de ce que le C++ appelle initialisation statique. C++ ne permettent dynamiques, l'initialisation se produire après l'entrée main, officiellement, mais tous les compilateurs ne initialiser des variables statiques, avant de main, et il ya une assez grande quantité de code qui en dépend.

InformationsquelleAutor Zachary | 2013-07-22