C initialiser const struct membre existant variable const
Je suis en utilisant par défaut C gcc.
Mon code:
typedef struct _OpcodeEntry OpcodeEntry;
//
struct _OpcodeEntry
{
unsigned char uOpcode;
OpcodeMetadata pMetadata;
};
//
const OpcodeMetadata omCopyBytes1 = { 1, 1, 0, 0, 0, 0, &CopyBytes };
const OpcodeEntry pOpcodeTable[] =
{
{ 0x0, omCopyBytes1 },
};
Erreurs:
error: initializer element is not constant
error: (near initialization for 'pOpcodeTable[0].pMetadata')
Si je change omCopyBytes1
ce que l'on fait dans la ligne ci-dessus, le code se compile très bien. Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas utiliser
omCopyBytes1
pour initialiser un membre depOpcodeTable[]
tableau, parce queomCopyBytes1
est une variable qui est de l'exécution constante de temps, pas une constante de compilation. Agrégation des initialiseurs en C doivent être des constantes de compilation, c'est pourquoi le code à partir de votre post ne compile pas.Comme une variable,
omCopyBytes1
a sa propre place dans la mémoire, qui est initialisé à un tableau d'éléments. Vous pouvez utiliser ces variables par un pointeur, comme ceci:Alternativement, vous pouvez en faire une constante de préprocesseur:
Si elle est définie de cette manière, le
omCopyBytes1
n'est plus une variable: ce serait une définition de préprocesseur qui disparaît avant que le compilateur est fait. Je déconseille le préprocesseur méthode, mais il est là, dans le cas où vous devez le faire.En C, les initialiseurs d'objets de statique de la durée de stockage doit être expressions constantes. Un
const
qualifiés variable n'est pas une expression constante.int x = rand();
est illégal.