ANSI和K&R两种函数定义风格

看到一个GZIP压缩的文件函数定义部分写的很奇怪,纠结了一下下,突然意识到是不是代码风格不同的原因,然后就查了下K&R的风格,果然如此,呵呵

留下这片文章做个标记,免得以后看到此类函数忘记了还有这种写法。


文章源地址:http://blog.chinaunix.net/uid-7426920-id-2627743.html


在C语言的函数定义上,我们通常都是用的函数定义方式为ANSI-C的函数定义方式。但是在C语言之父创立C语言之时,函数的定义形式并非现在我们所见到的形式。下面的代码显示了这样的差别,注意观察二者在 声明函数体签名上的差别。

#include <stdio.h>
#include <stdlib.h>
/*K&R Standard==============start===================*/
const char* originalFunc();
/*K&R Standard---------------end--------------------*/
/*ANSI Standard=============start===================*/
const char* ANSIFunc(char param1, char* param2);
/*You also can define the function like below.
* const char* ANSIFunc(char ,char*); */
/*ANSI Standard--------------end--------------------*/
int main() {
     printf("const char* originalFunc(param1,param2):%s\n", originalFunc('a',
          "word"));
     printf("const char* ANSIFunc(param1,param2):%s\n", ANSIFunc('a', "word"));
     return EXIT_SUCCESS;
}
/*K&R Standard==============start===================*/
const char* originalFunc(param1, param2)
char param1;char* param2; {
     printf("param1:%c\nparam2:%s\n", param1, param2);
     return "originalFunc";
}
/*K&R Standard---------------end--------------------*/
/*ANSI Standard=============start===================*/
const char* ANSIFunc(char param1, char* param2) {
     printf("param1:%c\nparam2:%s\n", param1, param2);
     return "ANSIFunc";
}
/*ANSI Standard--------------end--------------------*/


K&R的风格与ANSI-C的比,K&R风格又称为identifier-list,而另一种风格则又称为declarator,其中originalFunc(param1, param2) 即为这个declarator。事实上两种风格在ANSI 99 标准中(6.9.1节)都有定义,只不过我们更推崇declarator的方式。因为它将对参数进行强制类型转换,而标识符列表的方式则没有进行这项操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值