我是C的新手(我之前有Java,C#和一些C++经验).在C中,是否有必要声明一个函数原型,或者代码可以在没有它的情况下编译?这样做是很好的编程习惯吗?或者它只是依赖于编译器?(我正在运行Ubuntu 9.10并在Code :: Blocks IDE下使用GNU C编译器或gcc)
来自C编程语言第2版:
由于函数调用的参数是表达式,因此在将参数传递给函数时也会发生类型转换.在没有函数原型的情况下,char和short变为int,float变为double.
通过阅读文本,我得到的印象是,除非您通过使用强制转换或函数原型显式指定参数类型,否则函数参数将始终作为int或double传递.
为了验证我的假设,我编译了以下代码:
#include <stdio.h>
main()
{
unsigned char c = 'Z';
float number = 3.14f;
function_call(c, number);
}
void function_call(char c, float f)
{
}
Run Code Online (Sandbox Code Playgroud)
编译后我得到以下警告:
typeconversion.c:11:警告:'function_call'的冲突类型
typeconversion.c:7:警告:'function_call'之前的隐式声明就在这里
我的猜测是c和数字都在函数调用中转换为int和double,然后转换回char和float.这是真的发生了什么?