【发布时间】:2016-11-27 01:01:58
【问题描述】:
让我们考虑以下程序:
#include<stdio.h>
int test(a,b,c)
{
return a+b+c;
}
int main()
{
printf("%d\n",test(1,2,3));
printf("%d\n",test(1.5,2.2,2.3));
}
我不知道可以在 C 中指定函数而不定义其参数的类型。这是 ANSI C 的一个特性?谁可以给我解释一下这个?
我认为这是不可能的。但是,我的编译器可以编译这个程序!在哪些情况下我可以这样做?
另外,程序的行为有点奇怪。当我使用整数值时,函数会执行我们期望的操作。但是,当我使用浮点参数时,结果与我的预期大不相同。
【问题讨论】:
-
那不是有效的 C!
-
好的。是我想的。但是,我的编译器 (mingW) 编译它没有我们的问题。为什么?
-
那些'float'参数都是
double类型;你必须写1.5F才能使它们成为float类型。当一个函数没有原型时,因为没有test(),那么所有参数都会进行默认提升——小于int的整数类型转换为int,float值转换为double.现在使用 K&R 风格的函数定义是一个非常糟糕的主意,但 C11 标准仍然允许它们。你永远不应该自己写一个;你应该致力于升级你在你工作的代码中找到的任何东西。
标签: c function parameters