Если объявление функции выполняется в традиционном стиле, почему вывод не верен? - PullRequest
4 голосов
/ 03 октября 2019

Я объявил функцию pow традиционным способом объявления в C. Однако вывод функции неправильный. Мне не нужно включать math.h здесь, так как я объявляю функцию, и объектный код для нее уже присутствует. Вот мой код:

#include<stdio.h>

double pow();           //traditional declaration doesnt work, why??

int main()
{
    printf("pow(2, 3) = %g", pow(2, 3));
    return 0;
}

Вывод для вышеупомянутого равен 1, тогда как он должен быть 8. Пожалуйста, помогите мне с этим.

1 Ответ

3 голосов
/ 03 октября 2019

традиционное объявление не работает, почему ??

Поскольку без прототипа эти два предоставленных вами целых числа не конвертируются в двойные числа, которые pow фактически принимает. С «традиционными» объявлениями вы должны тщательно убедиться, что вы указали точно тип аргументов, ожидаемых функцией, или у вас будет неопределенное поведение в вашей программе.

Это одна из причинотдавать предпочтение прототипам и фактически использовать заголовки стандартной библиотеки, которые предоставляют их для стандартных функций.

...