C语言函数ANSI风格与K&R风格【是int fun(void)还是int fun()】_r&k风格-程序员宅基地

技术标签: C  Linux  

在学习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. 大括号的位置:非函数语句起始大括号在行尾,结束大括号在行首;函数语句的大括号都在行首

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/killfat/article/details/88046001

智能推荐

NodeJS使用淘宝 NPM 镜像/NPM使用国内源_npm.taobao.org-程序员宅基地

文章浏览阅读4.6k次,点赞2次,收藏2次。NodeJS使用淘宝 NPM 镜像/NPM使用国内源这是一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次以保证尽量与官方服务同步。当前registry.npm.taobao.org是从r.cnpmjs.org进行全量同步的. 当前npm.taobao.org运行版本是:[email protected] 本..._npm.taobao.org

经纬度转换为三维坐标_经纬度转3d-程序员宅基地

文章浏览阅读6.1k次。// 经纬度转换为球坐标double torad(double deg){ return deg/180*acos(-1);}void get_coordinate(double R,double lat,double lng,double &x,double &y,double z){ lat = torad(lat); lng = torad(lng);_经纬度转3d

室内设计——办公楼创意室内设计(包含预览图jpg和.psd文件)_办公楼内部设计-程序员宅基地

文章浏览阅读292次。一、描述 本设计用朴素的手法表现空间的本)质,传达文化的内涵。营造出一个个充满张力、层次丰富的办公空间。 各区域即独立又相互融合,亦可根据公司的使用和发展灵活调配。空间布局上层次分明,以树枝的络脉走向自然过渡到每个办公空间,用简洁的线条表现形式美,再配以恰到好处的灯光,营造出一个简洁明朗、自然通透的现代空间。二、效果图相关资源:室内设计——办公楼创意室内设计(包含预览图jpg和.psd文件).zip..._办公楼内部设计

【IDL】使用IDL对Landsat系列进行批量水体提取_landsat8的idl处理代码-程序员宅基地

文章浏览阅读3.5k次,点赞4次,收藏28次。目录landsat8landsat8_landsat8的idl处理代码

简单学习rxjs中map、concatAll、concatMap、mergeAll、mergeMap、switchAll、switchMap_concatall() mergeall-程序员宅基地

文章浏览阅读7.5k次,点赞3次,收藏7次。1、mapmap和javascript中的数组的map方法类似,不过这里为了结合下面的demo,我先用map做一个我们不想要的效果: const getData = (param) => { return of(`return: ${param}`).pipe( delay(Math.random() * 1000) ) }; from([1, ..._concatall() mergeall

建立第一篇hexo博客_hexo新建博客-程序员宅基地

文章浏览阅读735次。* 发布文章 * 过程: 先进入blog所在的文件夹,在终端输入 进入blog所在文件夹每次部署的步骤,三步 - hexo clean - hexo generate - hexo deploy* 增加tag * hexo new page ‘blog' 在source里面多了个目录life,里面有个index.md,也可以手动建立。页面格式和文章一样接着把链接加上th..._hexo新建博客

随便推点

如何评估随机森林模型以及重要预测变量的显著性-程序员宅基地

文章浏览阅读4.7w次,点赞63次,收藏334次。如何评估随机森林模型以及重要预测变量的显著性说到随机森林(random forest,RF),想必很多同学都不陌生了,毕竟这些机器学习方法目前非常流(fàn)行(làn)……白鱼同学也曾分..._incnodepurity

MEMS为何独领风骚?看完这篇秒懂!-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏6次。显微镜下的MEMS结构(注意图片上的刻度,是微米哦)文章来源:硬件十万个为什么卡西欧早年就以电机马达、继电器等机电产品闻名。如今的卡西欧本身就是MEMS的制造商之一,用MEMS的思路解决..._soc。mems

IDEA 创建Spring Boot 项目&整合jdbc详细步骤_idea2022.2.5-程序员宅基地

文章浏览阅读3.2w次,点赞48次,收藏33次。IntelliJ IDEA 创建Spring Boot 项目&整合jdbc详细步骤_idea2022.2.5

Windows Server2019安装详细步骤_windows server 2019安装教程-程序员宅基地

文章浏览阅读2.3w次,点赞11次,收藏73次。Windows Server2019安装详细教程_windows server 2019安装教程

关于Linux中的DenyHosts安装后导致自己IP被拉黑的问题-程序员宅基地

文章浏览阅读457次。关于这个问题我是第一次写,重点是本人上班第一天就碰到了。解决时间四小时方法亲测首先删除 /etc/hosts.deny中自己的ip删除 有可能不止一个然后在/etc/hosts.allow中添加自己的ip转载于:https://www.cnblogs.com/long777/p/7337617.html..._denyhosts经常拉黑

vue-awesome-swiper获取当前页的索引值_swiper4 当前页索引值-程序员宅基地

文章浏览阅读4.7k次。html<swiper ref="mySwiper" :options="swiperOptions"> <swiper-slide>Slide 1</swiper-slide> <swiper-slide>Slide 2</swiper-slide> <swiper-slide>Slide 3</swiper-slide> <swiper-slide>Slide 4</s_swiper4 当前页索引值

推荐文章

热门文章

相关标签