Redéfinition de variables
Bonjour,
En lisant compilant un code lu sur ce forum, j'ai été étonné que le code suivant compile sans erreur ni warning, et que la sortie en console soit correcte :
Code:
1 2 3 4 5 6 7 8 9 10 11
| #include <stdio.h>
int a;
int a;
int main(void)
{
a = 10;
printf("a = %d", a);
return 0;
} |
Celui-ci non plus ne pose pas de problème :
Code:
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h>
int a;
int a=1;
int main(void)
{
printf("a = %d", a);
return 0;
} |
En revanche, celui-ci produit des erreurs :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| #include <stdio.h>
int a=1;
int a=1;
int main(void)
{
int b;
int b; // ici, je m'y attendais
printf("a = %d", a);
return 0;
} |
Sortie de compilation :
Citation:
d:\Documents and Settings\pgradot\Mes documents\Tools SD\A voir\test.c|4|error: redefinition of 'a'|
d:\Documents and Settings\pgradot\Mes documents\Tools SD\A voir\test.c|3|note: previous definition of 'a' was here|
d:\Documents and Settings\pgradot\Mes documents\Tools SD\A voir\test.c||In function 'main':|
d:\Documents and Settings\pgradot\Mes documents\Tools SD\A voir\test.c|9|error: redeclaration of 'b' with no linkage|
d:\Documents and Settings\pgradot\Mes documents\Tools SD\A voir\test.c|8|note: previous declaration of 'b' was here|
d:\Documents and Settings\pgradot\Mes documents\Tools SD\A voir\test.c|9|warning: unused variable 'b'|
||=== Build finished: 2 errors, 1 warnings ===|
Pourquoi est-ce que je n'ai pas d'erreur pour les variables globales avec les 2 premiers codes ? Je précise que je compile avec CodeBlocks sous XP avec -Wall et -Wextra.
Merci ! :)