Мне интересно, почему компилятор пропустил это и выдает правильный вывод, хотя sqrt()
из его прототипа обычно должно получать только значение double
в качестве аргумента:
В C99 объявление прототипа:
двойной квадрат (двойной х);
#include <stdio.h>
#include <math.h>
int main (void)
{
int i = 9;
printf("\t Number \t\t Square Root of Number\n\n");
printf("\t %d \t\t\t %f \n",i, sqrt(i));
}
Выход:
Number Square Root of Number
9 3.000000
Почему компилятор, по крайней мере, не выдает предупреждение, а данный вывод правильный, если я даю функции sqrt()
int
в качестве аргумента?
Является ли это переходом в Неопределенное Поведение?
Я использую gcc.
Вопрос уже дважды задавался для C++, но не для C, поэтому мой вопрос для C. Я все равно предоставляю ссылки на вопросы для C++: