Je suis tombé sur une question intéressante dans un forum il y a longtemps et je veux savoir la réponse.
Considérons la fonction C suivante:
f1.c
#include <stdbool.h>
bool f1()
{
int var1 = 1000;
int var2 = 2000;
int var3 = var1 + var2;
return (var3 == 0) ? true : false;
}
Ce doit toujours renvoyer false
depuis var3 == 3000
. L' main
fonction ressemble à ceci:
principal.c
#include <stdio.h>
#include <stdbool.h>
int main()
{
printf( f1() == true ? "true\n" : "false\n");
if( f1() )
{
printf("executed\n");
}
return 0;
}
Depuis f1()
doit toujours renvoyer false
, on pourrait s'attendre à ce programme pour imprimer un seul faux à l'écran. Mais après la compilation et l'exécution, exécuté est également affiché:
$ gcc main.c f1.c -o test
$ ./test
false
executed
Pourquoi est-ce? Le code de avoir ce genre de comportement indéfini?
Note: j'ai compilé avec gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
.