Я давно наткнулся на интересный вопрос на форуме, и я хочу знать ответ.
Рассмотрим следующую 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.
