Erreur de syntaxe lors de l’utilisation de #define lors de l’initialisation d’un tableau et comme arguments d’une fonction dans C?

Utilisation d’une #define lors de l’initialisation d’un tableau

#include  #define TEST 1; int main(int argc, const char *argv[]) { int array[] = { TEST }; printf("%d\n", array[0]); return 0; } 

le compilateur se plaint:

 test.c: In function 'main': test.c:7: error: expected '}' before ';' token make: *** [test] Error 1 

Utiliser un #define comme argument d’entrée fonctionnel

 #include  #define TEST 1; void print_arg(int arg) { printf("%d", arg); } int main(int argc, const char *argv[]) { print_arg(TEST); return 0; } 

le compilateur se plaint:

 test.c: In function 'main': test.c:12: error: expected ')' before ';' token make: *** [test] Error 1 

Comment résoudre ces deux problèmes? Je pensais que C effectuait simplement une recherche et un remplacement sur le fichier source, remplaçant TEST par 1 , non?

Le problème est qu’il existe un point-virgule dans votre #define TEST 1; .

Avec cela, le programme se traduit par:

 int array[] = { 1; }; /*this is illegal!*/ 

Remède: enlevez-le pour qu’il ressemble à:

 #define TEST 1 

qui se traduit par:

 int array[] = {1}; /*legal*/ 

Retirer ; après définir.

 #define TEST 1