Je reçois une erreur sur la ligne 6 (initialiser my_foo à foo_init) du programme suivant et je ne suis pas sûr de comprendre pourquoi. Gardez à l'esprit qu'il s'agit d'une version simplifiée d'un projet multi-fichiers plus important sur lequel je travaille actuellement. Le but était d'avoir une seule constante dans le fichier objet, que plusieurs fichiers pourraient utiliser pour initialiser une structure d'état. Comme il s'agit d'une cible intégrée avec des ressources limitées et que la structure n'est pas si petite, je ne veux pas de multiples copies de la source. Je préfère ne pas utiliser:Erreur "l'élément d'initialisation n'est pas constant" lors de l'initialisation de la variable avec const
#define foo_init { 1, 2, 3 }
Je suis aussi en train d'écrire du code portable, donc je besoin d'une solution qui est valide C89 ou C99.
Cela concerne-t-il les ORG dans un fichier objet? Les variables initialisées vont dans un ORG et sont initialisées en copiant le contenu d'un second ORG?
Peut-être que je vais juste besoin de changer de tactique, et avoir une fonction d'initialisation faire toutes les copies au démarrage. À moins qu'il y ait d'autres idées?
+5 pour la bonne explication, mais étonnamment ce programme se compile bien sur ideone: http://ideone.com/lx4Xed. Est-ce un bug du compilateur ou une extension du compilateur? Merci – Destructor
@meet: Je ne sais pas quelle combinaison d'options de compilateur ideone utilise sous le capot, mais leurs résultats sont souvent étranges au-delà de la description. J'ai essayé de compiler ce code sur Coliru (http://coliru.stacked-crooked.com/a/daae3ce4035f5c8b) et j'ai obtenu l'erreur attendue, quel que soit le paramétrage du dialecte en langage C que j'ai utilisé. Je ne vois rien de semblable à cela sur le site Web de GCC en tant qu'extension de langage C. En d'autres termes, je n'ai aucune idée de comment et pourquoi il compile dans ideone. Même s'il se compile comme une extension de langage, il devrait quand même produire un message de diagnostic dans C. – AnT
'enum {N = 5};' est une façon sous-estimée de déclarer des constantes sans devoir recourir à '# define'. –