十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在许多c语言初学者中编写函数时,都喜欢将无参函数中的参数类型忽略。
创新互联服务项目包括中阳网站建设、中阳网站制作、中阳网页制作以及中阳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,中阳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到中阳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
但是实际上 默认的参数类型 不是无参 void ,而是接受 任意数量和类型的参数 。也就是说 int func() 和 int func(void) 是不一样的。下面通过一个例子加深了解一下在C语言中函数的默认参数类型:
所以说,在使用c语言编写无参函数时,一定要把 void 写上去,不然会有安全隐患。
C语言不支持默认参数,不过可以用宏来模拟:
//---------------------------------------------------------------------------
#include stdio.h
#define DEFAULT 40 /*默认参数值*/
#define FUN(A) fun(#A##"-") /*用于实现默认参数的宏*/
int f(int n) /*用于实验默认参数的函数*/
{
return printf("%d\n",n);
}
int fun(const char *a) /*确定函数调用的函数,返回值类型要和实际需要调用的f()函数返回值类型一致*/
{
int n; /*变量的类型要和f()函数参数的类型一样*/
if (a[0]=='-') n=DEFAULT;
else sscanf(a,"%d",n);
return f(n);
}
int main(void)
{
FUN();
FUN(67);
return 0;
}
//---------------------------------------------------------------------------
函数返回类型是你定义函数时自己决定的,默认为int型
C语言函数格式为:
类型名
函数名(形参1,形参2……)
类型名就决定了返回类型,如果没有明确写出返回类型的话,默认为int类型。
void是空类型,
void必须要明确写出来才可以,指的是函数不提供返回值,不是默认的。
比如:
函数定义
int
fun(int
a)
返回值就是整型
函数定义
int
*fun(int
a)
返回值就是整型的指针
函数定义
void
fun(int
a)
无返回值
C语言中没有参数默认值的概念,但其实可以利用宏来模拟参数的默认值;
我们之前介绍过可变参数宏与逗号运算符,将两者相结合的话可以定义出以下形式的宏:
当在 func() 里不填写任何内容的时候,正常情况下宏展开后会是 func((default,)) ,但由于 ##__VA_ARGS__ 会将前面多余的逗号忽略,所以宏展开后就相当于 __func((default)) ;
当在 func() 括号里填写有效值的时候,根据逗号运算符的值等于最后一个表达式的值的性质,宏会被展开为 __func((##__VA_ARGS__)) 既 default 被丢弃,传入的值只有我们填写的内容,通过这个技巧我们就可以设计出一个带有默认参数的函数。
示例:
定义一个函数默认参数为 0xff ,不传任何参数的时候打印 0xff ,传入有效值的时候就打印我们传入的内容;
输出: