【发布时间】:2025-12-03 02:40:01
【问题描述】:
我想知道为什么编译器让它通过并给出正确的输出,尽管其原型中的 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++ 问题的链接:
Why does sqrt() work fine on an int variable if it is not defined for an int?
【问题讨论】:
标签: c int arguments language-lawyer sqrt