J'ai 2 définit, une avec une chaîne et une avec un nombre. Comment puis-je faire un tableau const à partir de la définir avec la chaîne et le nombre. Il y a aussi une constante supplémentaire qui devrait être dans ce tableau.C char de chaîne à tableau
Comment puis-je écrire ce code pour avoir 0x22, 0x41, 0x42, 0x42, 0x21 dans le tableau foobar, à partir des définitions FOO et BAR?
#define FOO "AB"
#define BAR 33
extern int rs232_write(const unsigned char *data, unsigned char count);
const unsigned char foobar[] =
{
0x22,
FOO[0], /*what must i put here, this do not work*/
FOO[1],
0x42,
BAR,
};
int main(void)
{
rs232_write(foobar,sizeof(foobar));
return 1;
}
En gcc, par exemple, je reçois l'erreur:
./001.c:9:5: error: initializer element is not constant
FOO[0], /*what must i put here*/
^
La chaîne ont toujours la même longueur. J'ai aussi essayer l'inverse:
#define FOO "AB"
#define BAR 33
extern int rs232_write(const unsigned char *data, unsigned char count);
const char foobar[] = \
"\x22" \
FOO \
"\x42" \
BAR /*what must i put here, this also not work*/
int main(void)
{
rs232_write(foobar,sizeof(foobar));
return 1;
}
Ici, je reçois aussi une erreur, par exemple imprime gcc:
./002.c:2:13: error: expected ‘,’ or ‘;’ before numeric constant
#define BAR 33
^
Je travaille sur un micro-contrôleur avec pas beaucoup d'espace, donc je j'aime éviter de créer le tableau à l'exécution et mon compilateur ne supporte que C89.
Quel est le problème avec le code que vous nous montrez? –
Voir le commentaire, le compilateur ne l'accepte pas (aussi essayé avec gcc), "error: l'élément initializer n'est pas constant" et "error: expected", 'or'; 'avant la constante numérique " – 12431234123412341234123
Lorsque vous postez des questions sur les erreurs de compilation, toujours inclure les erreurs exactes (sous forme non modifiée et non modifiée et surtout * complète *) dans le corps de la question. De préférence, un copier-coller direct du journal de construction complet. –