Нет math.h include – значение возвращаемой функции sqrt?

У меня есть код C:

#include  main() { double wurzelZwei; wurzelZwei = sqrt(2.0); printf("Wurzel 2: %lf\n", wurzelZwei); } 

Почему возвращаемое значение sqrt «1073742463», а компилятор / компоновщик показывает только предупреждение и отсутствие фатальной ошибки, когда «math.h» libary не включен?

В C89 и ранее разрешено вызывать функцию, которая не была объявлена. При этом предполагается, что эта функция имеет тип возврата int. Это называется неявным объявлением.

Когда вы вызываете функцию таким образом, но она была определена с помощью типа возврата, отличного от int, вы вызываете неопределенное поведение так же, как если бы вы явно объявили функцию с другим типом возврата, чем вы определили.

Таким образом, в вашем случае происходит то, что вы неявно объявляете sqrt с типом возвращаемого по умолчанию int, поэтому возвращаемое значение, которое вы получаете из sqrt (ложно) интерпретируется как int, и затем int преобразуется в double, когда вы храните его в wurzelZwei .