C语言函数默认返回类型的小问题

#include<stdio.h>
abs(int a);
main()
{
int i=1;
i=abs(4);
printf("hello word=%d",i);
}
abd(int a)
{

}
这个函数为什么可以运行额?运行结果i=4。。。。c语言无返回值类型默认是int型。。怎么感觉好像是void、int双重类型

虽然语法是C的,但是文件是cpp的吧。C++编译器编译时,函数名前面不写void默认为int的。追问

文件改成C的了。。。。C语言他不就规定了不写VOID默认为int吗

追答

“C语言他不就规定了不写VOID默认为int吗”:这个和编译器有关吧。我们学C是用的是DEV这个编译器,至少这个编译器不会把C的void默认为int。。。你用的VC实际上是在用C++的编译器编译C语言。

如果默认了,那不就对了吗?就是int呀,为什么会认为是int和void的双重类型呢?
我用VS2010编译运行,结果是-858993460。原因应该是输出了一个未初始化的值(你的那个赋值语句在这个编译器里应该被视为只声明了,未赋值)。可能任意未赋值的整数都会被视为这个值吧。你可以看一下这个:http://tieba.baidu.com/f?kz=871822422

至于有人说VC下输出为4,我不清楚VC的编译器是怎么做到的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-01
c 文件编译时会把为类型函数转为 int 型
由于 当中函数部分无内容 所以 输出值已与函数本身无关了
也就相当于 i=(4);
第2个回答  2011-08-01
可以运行吗,我用vc6链接时有错。追问

我也用的VC。。可以运行额

追答

但结果是随机值,不是4.

第3个回答  2011-08-01
C99 就 已经剔除了默认函数返回类型的功能,也就是说,如果你的编译器遵循标准C的话,

这个代码编译就通不过了,实际运用中不会碰到这样的代码了。

换个新一点的编译器吧。
相似回答