Je considère une certaine solution où je voudrais initialiser une cellule d'un tableau qui est définie dans un autre module (il y aura beaucoup de modules initialisant une table). Le tableau ne sera pas lu avant l'exécution de main (donc il n'y a pas de problème avec l'ordre d'initialisation statique).Initialiser partiellement la variable définie dans l'autre module
Mon approche:
/* secondary module */
extern int i[10]; // the array
const struct Initialize {
Initialize() { i[0] = 12345; }
} init;
/* main module */
#include <stdio.h>
int i[10];
int main()
{
printf("%d\n", i[0]); // check if the value is initialized
}
compilateur ne supprimera pas à init
constante parce que le constructeur a des effets secondaires. Ai-je raison? Est-ce que le mécanisme est OK? Sur GCC (-O3) tout va bien.
// EDIT
Dans un monde réel, il y aura beaucoup de modules. Je veux éviter un module supplémentaire, une place centrale qui rassemblera toutes les routines d'initialisation mineures (pour une meilleure évolutivité). Il est donc important que chaque module déclenche sa propre initialisation.
Vous présumez toujours que lors de l'initialisation de chaque module, le tableau i [] est déjà alloué (non initialisé). –
AFAIK espace de stockage statique est alloué (et mis à zéro) en une seule étape lorsque l'application démarre. – adf88
UP: il s'agissait de ** global ** espace de stockage statique – adf88