Я давно наткнулся на интересный вопрос на форуме, и я хочу знать ответ.
Рассмотрим следующую C-функцию:
f1.c
#include <stdbool.h>
bool f1()
{
int var1 = 1000;
int var2 = 2000;
int var3 = var1 + var2;
return (var3 == 0) ? true : false;
}
Это всегда должно возвращать false
с var3 == 3000
. Функция main
выглядит следующим образом:
main.c
#include <stdio.h>
#include <stdbool.h>
int main()
{
printf( f1() == true ? "true\n" : "false\n");
if( f1() )
{
printf("executed\n");
}
return 0;
}
Так как f1()
всегда должен возвращать false
, можно ожидать, что программа напечатает на экране только одно значение false. Но после компиляции и запуска его также выполняется:
$ gcc main.c f1.c -o test
$ ./test
false
executed
Почему? Этот код имеет своего рода поведение undefined?
Примечание. Я скомпилировал его с помощью gcc (Ubuntu 4.9.2-10ubuntu13) 4.9.2
.