相关疑难解决方法(0)

必须在C中声明函数原型吗?

我是C的新手(我之前有Java,C#和一些C++经验).在C中,是否有必要声明一个函数原型,或者代码可以在没有它的情况下编译?这样做是很好的编程习惯吗?或者它只是依赖于编译器?(我正在运行Ubuntu 9.10并在Code :: Blocks IDE下使用GNU C编译器或gcc)

c function function-prototypes

54
推荐指数
3
解决办法
8万
查看次数

C:在函数调用上传递参数时的类型转换

来自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.这是真的发生了什么?

c type-conversion

15
推荐指数
2
解决办法
1万
查看次数