C语言函数ANSI风格与K&R风格【是int fun(void)还是int fun()】

1 篇文章 0 订阅

在学习C语言函数指针的过程中,我发现了函数的参数列的一些问题:无论参数部分是否填入类型,编译均可通过。

 

查阅资料后发现C语言中有两种函数参数风格:ANSI和K&R。ANSI是我们所学习的风格;K&R则是老式的,是编写Linux内核所使用的风格。

 

int foo(void) 还有 int foo(int a, int b)就是ANSI风格的。它的特点是参数都有类型

对应的,int foo() 和 int foo(a,b)是K&R风格,它使用初始化列:

//无参数的K&R风格接受任何参数,后者的声明方法是接受两个任意类型的参数
int foo();                 //int foo(a,b);
//参数类型声明在函数体前面
int foo(a, b)
int a;
int b;
{
    return a+b;
}

当我们写下int foo()的时候,我们实际上已经在不知不觉中使用了K&R风格的函数声明了!当然后面的函数体部分奇怪的结构仅限C编译器,这些代码以cpp后缀编译时无法通过。

函数调用时,编译器检查的是函数声明。因此假如函数声明是形如int foo()的,无论我们函数体中实际传入多少参数,编译都不会报错。这使得很多情况下我们无法检查出问题。因此并不推荐这样的写法。

 

因此在绝大多数C开发中,我们应该使用ANSI风格,在没有参数的函数都要在参数部分注明void,以便编译器进行参数检查,从而尽可能地减少人为的错误。

 

拓展:K&R风格不仅包括函数参数,还有其他一系列约定。列举一些有趣的内容:

1. 使用8个字符缩进:有人可能抱怨缩进导致一行无法容纳许多字符。但是他们的看法是,超过3级缩进说明代码需要重构

2. 命名尽量通俗:以变量类型命名的微软经常开发出糟糕的代码

3. 大括号的位置:非函数语句起始大括号在行尾,结束大括号在行首;函数语句的大括号都在行首

当然这些内容仁者见仁智者见智了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>