既然void表示void函数的返回值不能接受数据,为什么还能写括号内的代码

第八节:C语言基础——函数基本概念第八节:C语言基础——函数基本概念技术八百家号一、函数概念引入1.1 在C语言中可以把语句划分成多个不同的函数,每个函数中包含一组相关的语句;1.2 所有C语言程序都是由一个或者多个函数构成的,每个函数有自己名字,不同函数的名字不同函数之间通过互相调用建立联系;1.3 调用函数:在函数调用过程中先开始工作,工作时间比较长的函数;1.4 被调用函数:在函数调用过程中后开始工作,工作时间比较短的函数;1.5 在函数调用过程中绝大多数情况下伴随着双向的数据传递;二、函数的参数2.1 调用函数把数据传递给被调用函数是通过函数的参数来进行传递的;2.2 函数最明显的特征是就使用时带括号(),函数的参数就是括号()里的数据或变量;2.3 函数也可以没有参数;2.4 形式参数:在编写函数的时,在函数名称后面的小括号里声明一组变量,这些变量的存储区,可以用来把调用函数提供的数据传递给被调用函数;2.5 函数小括号里的所有内容统称为形参列表,形式参数的个数任意,类型任意;2.6 形式参数在函数调用开始的时候临时创建出来,在函数调用结束的时候被销毁;2.7 实际参数:在函数调用语句中需要为每个形式参数提供一组对应的数据,这些数据的个数和类型必须和形式参数一样;2.8 形式参数和实际参数分别对应不同的存储区,对形式参数的修改不会影响实际参数;2.9 如果在函数的小括号里什么都没写, 则表示函数可以接受任意个数任意类型的形式参数;2.10 在函数名称后面的小括号里写void表示函数不接受任何实际参数;三、函数的返回值3.1 被调用函数把数据传递给调用函数是通过函数的返回值来进行传递的;3.2 在函数名称前写void表示函数不提供返回值存储区;3.3 如果函数名称前什么都不写则表示函数有一个整数类型的返回值存储区;3.4 如果函数有返回值存储区但是没有使用return关键字向里面放数字则这个存储区里的内容不确定;3.5 如果返回值存储区类型和返回值数字类型不一致就可能导致数据丢失;3.6 return关键字可以立刻结束函数的执行;四、函数的声明4.1 函数声明就是告诉编译器我要使用这个函数,现在没有找到它的定义不要紧,请不要报错,稍后我会把定义补上。4.2 函数声明的格式:返回值类型 函数名( 类型 形参, 类型 形参… );int swap(int a, int b);4.3 有了函数的声明,函数就可以在任何地方定义,比如:其他的文件或静态库或动态库文件里进行定义;4.4 我们平时使用的printf(), scanf()等函数需要引入stdio.h这个头文件,这个头文件只是对这些函数的声明,函数的定义在系统库中;五、函数的定义返回值类型 函数名称(函数参数)函数体说明:返回值类型:可以是C语言中的任意数据类型,例如 int、float、char 等函数名称:是标识符的一种,命名规则和标识符相同,函数名后面的括号( )不能少。函数体:是函数需要执行的代码,在函数体中使用return语句返回数据;通过 函数实现1---n的求和本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。技术八百家号最近更新:简介:外星人,提供最全面的信息。作者最新文章相关文章如题,c语言中,void在函数括号内和在函数前面的区别?
void在函数括号内:该函数的参数为空,或者说该函数不带参数
void在函数前面:该函数返回值为空。
希望能给你帮助。
1.给定程序program.c中,编写函数fun 的功能用选择排序法对数组的的数据按从小到大的顺序排列。
注意:请勿改动主函数mian和其他函数中的任...
不定义当然不行了,不定义的话单片机不知道i是个什么东西
i就有可能是字符型、整形、浮点型等等
单片机就没法计算
这都是规定吧
你这里面程序写错了,P0=1是不对的,一般来说如果想让P0同步亮或灭,应该是设定P0^7-P0^0这八个独立的口同时为零或同时为一来使这八个口同时为低电平或高电...
一、一维数组的定义
类型说明符  数组名[常量表达式];
1、类型说明符用来定义数组中各个数据元素的类型。在任何一个数组中,数据 , 元素的类型都是一致...
C语言延时都不准,for循环与while循环延时时间受很多因素影响,大概延时时间你可以通过示波器观察,具体算法,恐怕无法定义(我个人暂时性观点,有待定论)。想精...
答: 与单链表相比,双向循环链表有哪些优点
答: 1 现代计算机的技术发展史
(1)始于微型机时代的嵌入式应用
电子数字计算机诞生于1946年,在其后漫长的历史进程中,计算机始终是供养在特殊的机房中,实现数值计...
答: 视频线接触不良。换条视频线
显卡烧了。换个显卡
内存模块有问题。换内存试试
cpu过热问题。或是散热不好,风扇坏了
显示器问题。试试把显示器接到其它主机试试
根本就没有正式的国际驾照,如果到国外开车,正式的程序:
1、到公证处办理驾照的公证书,可以要求英文或者法文译本(看看到哪个国家而定);
2、拿公证书到外交部的领事司指定的地点办理“领事认证”,可以登录外交部网站查询,北京有4、5家代办的,在外交部南街的京华豪园2楼或者中旅都可以。
3、认证后在公证书上面贴一个大标志;
4、有的国家还要到大使馆或者领事馆盖章一下。
偶前几天刚刚办过。
嫌麻烦就把你洗衣机的型号或断皮带,拿到维修点去买1个,自己装上就可以了(要有个小扳手把螺丝放松,装上皮带,拉紧再紧固螺丝)。
如何洗衣服?也许有人会说,衣服谁不会洗啊?放到水里,加点洗衣粉洗就成了呗。是啊,说是这样说,可是洗衣服还有不少学问呢。我就说说我的“洗衣经”吧。
说起洗衣服,想想真有不少要说的呢。
首先要分开洗。内衣外衣、深色浅色要分开。个人和个人的衣物也尽量分开洗涤,这样可以防止不同人体间细菌和病菌的相互交叉感染,尤其是宿舍或者朋友的衣服尽量不要放置在一起洗。即使是自己的衣服,内衣和外衣也要分开洗。因为外衣接触外界的污染和尘土较多,而内衣将直接接触皮肤,为避免外界尘螨等对皮肤的不良入侵,内外分开洗涤是有科学道理的。不同颜色的衣物要分开洗涤,可将颜色相近的一同洗涤,浅色的一起洗涤,容易掉色的单独洗涤,避免衣物因脱色而损坏。另外,袜子和其他衣物不要一起洗涤。
其次,使用洗衣粉宜提浸泡一会。洗衣粉功效的发挥不同于肥皂,只有衣物适时浸泡才能发挥最大的洗涤效果。浸泡时间也不宜太长,一般20分钟左右。时间太长,洗涤效果也不好,而且衣物易褶皱。有人洗衣服时把洗衣粉直接撒在衣物上便开始搓揉洗涤,那样不能发挥最好的洗涤效果,对洗衣粉是一种浪费,当然,免浸泡洗衣粉出外。另外,冬季一般宜使用温水浸泡衣物。水温过低,不能有效发挥洗衣粉的洗涤效果,水温太高,会破坏洗衣粉中的活性成分,也不利于洗涤。
再次,衣物及时更换,及时洗涤。衣服要及时更换,相信道理大家应该都很清楚。可是,衣物换下后应该及时清洗,有人却做的不好。好多家庭喜欢将换的衣服积攒起来,每周洗一次,这样很不科学,容易使衣物上积聚的细菌大量繁殖,容易诱发皮疹或皮肤瘙痒症状。为了个人和家人的身体健康,还是勤快一点,把及时换下的衣物及时洗涤,这样,其实也费不了多少时间,也不至于最后要花费半天甚至更长 的时间专门来洗涤大量的衣物要节约的多。另外衣服穿的太久就比较脏,要花很大的力气洗涤才能洗干净,也容易将衣物搓揉变形,而影响美观和穿着效果。
洗衣服是个简单的小家务,也是生活中不可缺少的一件事,学问却很多,也许您的“洗衣心得”比这还要科学,还要多样,欢迎您 的指正~~
规模以上工业企业是指全部国有企业(在工商局的登记注册类型为"110"的企业)和当年产品销售收入500万元以上(含)的非国有工业企业。
债项评级是对交易本身的特定风险进行计量和评价,反映客户违约后的债项损失大小。特定风险因素包括抵押、优先性、产品类别、地区、行业等。债项评级既可以只反映债项本身的交易风险,也可以同时反映客户信用风险和债项交易风险。
银行卡开通网上银行、手机银行、电话银行等渠道交易时,需要预留一个支付密码,用来对外转账支付用的,这个密码不是查询密码,也不是网上银行的登陆密码。工行手机银行“支付密码”是您通过手机银行(WAP)办理对外转账汇款、缴费付款、消费支付等业务时使用的密码。支付密码包括动态密码和自设密码两种类型。动态密码是指口令卡密码,如果您是自设密码客户,在办理对外支付交易时必须申领电子银行口令卡。
一、利息计算公式主要分为以下四种情况,第一,计算利息的基本公式,储蓄存款利息计算的基本公式为:利息=本金×存期×利率;
第二,利率的换算,其中年利率、月利率、日利率三者的换算关系是:年利率=月利率×12(月)=日利率×360(天);月利率=年利率÷12(月)=日利率×30(天);日利率=年利率÷360(天)=月利率÷30(天),除此之外,使用利率要注意与存期相一致;
第三,利息计算公式中的计息起点问题,1、储蓄存款的计息起点为元,元以下的角分不计付利息;2、利息金额算至厘位,实际支付时将厘位四舍五入至分位;3、除活期储蓄年度结算可将利息转入本金生息外,其他各种储蓄存款不论存期如何,一律于支取时利随本清,不计复息;
第四,利息计算公式中存期的计算问题,1、计算存期采取算头不算尾的办法;2、不论大月、小月、平月、闰月,每月均按30天计算,全年按360天计算3、各种存款的到期日,均按对年对月对日计算,如遇开户日为到期月份所缺日期,则以到期月的末日为到期日。
二、存期计算规定
1、算头不算尾,计算利息时,存款天数一律算头不算尾,即从存入日起算至取款前一天止;
2、不论闰年、平年,不分月大、月小,全年按360天,每月均按30天计算;
3、对年、对月、对日计算,各种定期存款的到期日均以对年、对月、对日为准。即自存入日至次年同月同日为一对年,存入日至下月同一日为对月;
4、定期储蓄到期日,比如遇例假不办公,可以提前一日支取,视同到期计算利息,手续同提前支取办理。
利息的计算公式:本金×年利率(百分数)×存期
如果收利息税再×(1-5%)
本息合计=本金+利息
应计利息的计算公式是: 应计利息=本金×利率×时间
应计利息精确到小数点后12位,已计息天数按实际持有天数计算。
PS:存期要与利率相对应,不一定是年利率,也可能是日利率还有月利率。
注销公积金账户并进行提取,3个月内会到职工公积金联名卡所在的银行账户内。携带资料以下4样:
1.住房公积金提取申请表,一式三份; 2.住房公积金提取凭证,一式四联,加盖财务章; 3.劳动关系解除协议原件及复印件;
4.本人身份证及复印件。
迪曲及摇滚乐都属于过分激烈的音乐,长期听这种音乐,会使孕妇的神经系统受到强烈的刺激,并破坏心脏及血管系统的正常功能,使人体中去甲肾上腺素的分泌增多,从而使孕妇子宫平滑肌收缩,造成胎儿血液循环受阻,胎盘供血不足,引起胎儿发育不良,同时这也是造成流产或早产的原因之一。
朋友家用的是优掌柜的,他也推荐我买那个牌子,我在他店里用过一下,真的挺不错的。
格兰特,作为管道行业科技创新的新锐先锋,秉承着恒久不变的前瞻特质,以“亲水·亲情·亲生活”的品牌理念,致力于“国际绿色健康输水系统”的建设,将创新科技、节能环保、时尚设计完美结合制造高标准、高品质、高效率、高服务的输水管道解决方案,为全球消费者提供最大化的健康水环境 并引领着中国管道行业高水准时代。
你只要找个技校甄选考《汽车修理中级证》就可以了!培训和考试费大概要960 元!
洛阳高考美术培训素描的基础知识有哪些?工具的选用取决于画家所想要达到的艺术效果。深入刻画,按照“从整体到局部再到整体再到局部”的规律来塑造物体的形体,塑造时候要注惫物体的体积感、质感。
洛阳美术培训机构的老师还建议学员调整画面的整体色调和虚实关系,突出主体,加强空间感,画面主、次物体之间要有空间的区分,物体附近的衬布要适当的刻画的实些。
中考志愿填写一般在网上展开。
正在加载...
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415C语言的语法风格与代码书写规范指南
转载 &更新时间:日 15:07:39 & 投稿:goldensun
这篇文章主要介绍了C语言的语法风格与代码书写规范指南,文中主张了一些诸如变量和结构体的命名规范等细节方面的问题,需要的朋友可以参考下
#include &stdio.h&
int main(void)
printf("That is Right Style\n");
在一个标准的C语言程序中,最特殊的莫过于main函数了,而说到底它就是一个函数而已,仅仅因为它地位特殊拥有第一执行权力,换句话说,难道因为一个人是省长它就不是人类了?所以函数该有的它都应该有,那么函数还有什么呢?
函数大体上分为内联函数(C99)(内联函数并非C++专属,C语言亦有,具体见前方链接)和非内联的普通函数,它们之间有一个很明显的特点(一般情况下),那就是不写原型直接在main函数上方定义,即使不加'inline'关键字,也能被编译器默认为内联函数,但之后带来的某些并发问题就不是编译器考虑的了。
普通函数正确的形式应该为声明与定义分离,声明就是一个函数原型,函数原型应该有一个函数名字,一个参数列表,一个返回值类型和一个分号。定义就是函数的内在,花括号内的就是函数的定义:
int function(int arg_1, float arg_2);
int main(int argc, char* argv[])
int output = function(11, 22.0);
printf("%d\n",output);
int function(int arg_1, float arg_2)
int return_value = arg_1;
float temp_float = arg_2;
return return_
依上所述,当非必要时,在自己编写函数的时候请注意在开头(main函数之前)写上你的函数的原型,并且在末尾(main函数之后)写上你的函数定义,这是一个很好的习惯以及规范。所谓代码整洁之道,就是如此。
函数的另一种分类是,有返回值和无返回值,返回值的类型可以是内建(build-in)的也可以是自己定义的(struct, union之类),无返回值则是void。
为什么我们十分谴责void main()这种写法?因为这完全是中国式教育延伸出来的谭式写法,main函数的返回值看似无用,实际上是由操作系统接收,在Windows操作系统下也许无甚"大碍"(实际上有),当你使用Linux的过程中你会清晰的发现一个C语言程序的main返回值关系到一个系统是否能正常,高效的运行,这里稍微提一句,0在Linux程序管道通信间代表着无错可行的意思。所以请扔掉void main这种写法。
为什么我们对 main()这种省略返回值的写法置有微词?能发明这种写法的人,必定是了解了,在C语言中,如果一个函数不显式声明自己的返回值,那么会被缺省认为是int,但这一步是由编译器掌控,然而C语言设计之初便是让我们对一切尽可能的掌握,而一切不确定因子我们都不应该让它存在。其次有一个原则,能自己做的就不要让编译器做。
为什么我们对参数放空置有不满(int main())?在C语言中,一个函数的参数列表有三种合法形态:
int function();
int function(void);
int function(int arg_n);
int function(int arg_n, ...);
第一种代表拥有未知个参数,第二种代表没有参数,第三种代表有一个参数,第四种代表拥有未知个参数,并且第一个参数类型为int,未知参数在C语言中有一个解决方案就是,可变长的参数列表,具体参考C标准库,在此我们解释的依据就是,我们要将一切都掌控在自己的手中,我们不在括号内填写参数,代表着我们认为一开始的意思是它为空,正因此我们就应该明确说明它为void,而不该让它成为一个未知参数长度的函数,如此在你不小心传入参数的时候,编译器也无法发现错误。
int main(int argc, char* argv[]) 和 int main(void)才是我们该写的C语言标准形式
对于缩进,除了编译器提供的符号缩进之外,我们可以自己给自己一个规范(请少用或者不用Tab),比如每一块代码相教上一个代码块有4格的缩进。
对于学习C语言,请使用.c文件以及C语言编译器练习以及编写C程序,请不要再使用C++的文件编写C语言程序,并且自圆其说为了效率而使用C++的特性在C语言中,我们是祖国的下一代,是祖国的未来,请不要让自己毁在当下,珍爱编程,远离清华大学出版社。
之所以如此叙述,并不是因为情绪,而是当真如此,下方代码:
/*file: test.c*/
#include &stdio.h&
#define SIZES 5
int main(void)
int* c_pointer = malloc(SIZES * sizeof(int));
/*发生了一些事情*/
free(c_pointer);
这是一段标准的C语言程序,但是它能在C++个编译器下编译运行吗?换句话说当你将文件扩展名由.c改为.cpp之后,它能编译通过吗?答案是不能。
为什么?答案是C++并不支持void*隐式转换为其他类型的指针,但是C语言允许。还有许许多多C于C++不相同的地方,兴许有人说C++是C的超集,但我并不这么认为,一门语言的出现便有它的意义所在,关键在于我们如何发挥它的最大优势,而不是通过混淆概念来增强实用性。
程序式子的写法
一个人活在世界上,时时刻刻都注意着自己的言行举止,而写程序也是如此,对于一个规范的能让别人读懂的程序而言,我们应该尽可能减少阻碍因子,例如:
int main(void)
{int complex_int=100;
int i,j,k,x;
for(int temp=0;temp&complex_++temp){k=
x=k+complex_}
printf(complex_int="%d is k=%d x=%d\n",complex_int,k,x);
return 0;}
对于上述的代码,我总是在班级里的同学手下出现,但这段代码除了让别人困惑以外,自己在调试的时候也是十分不方便,每每遇到问题了,即便IDE提示了在某处错误,你也找不到问题所在,经常有人来问我哪里错了,大部分情况都是少了分号,括号,或者作用域超过,原因在哪?
要是一开始将代码写清楚了,这种情况简直是凤毛麟角,想遇上都难。对于一个代码而言,我们应该注意让其变得清晰。
等号两边使用空格:
int complex_int = 100;
使用多个变量的声明定义,或者函数声明定义,函数使用时,注意用空格分开变量:
int i, j, k,//但是十分不建议这么声明难以理解意义的变量
printf("complex_int = %d is k = %d x = %d\n", complex_int, k, x);
void present(int arg_1, double arg_2);
对于一个清晰的程序而言,我们要让每一个步骤清晰且有意义,这就要求我们在编写程序的时候尽量能让代码看起来结构化,或者整体化。尽量让每个程序式子为一行,如果有特别的需要让多个式子写在同一行,可以使用,操作符进行组合,但是会让程序更难理解,日后调试的时候也更难发现错误。
/*Style 1*/
for(int temp = 0;temp & complex_++temp)
x = k + complex_
/*Style 2*/
for(int temp = 0;temp & complex_++temp){
x = k + complex_
对于上方的代码,是C语言代码花括号的两种风格,最好能选择其中一种作为自己的编程风格,这样能让你的程序看起来更加清晰,混合使用的利弊并不好说,关键还是看个人风格。
对于作用域而言,在C语言中有一个经常被使用的特例,当一个条件语句,或者循环只有一条语句的时候,我们常常省略了花括号{},而是仅仅使用一个分号作为结尾,这在很多情况下让代码不再啰嗦:
if(pointo_int == NULL)
fprintf(stderr, "The pointer is NULL!\n");
printf("%d\n",*pointo_int);
pointo_int = pointo_int-&
在这段代码中if语句下方的代码并没有使用{}运算符进行指明,但是根据语法,该语句的确是属于if语句的作用范围内,如果我们此时写上了{}反而会令代码看起来过于啰嗦。但是有的时候,这条特性并不是那么的有趣,当使用嵌套功能的时候,还是建议使用{}进行显式的范围规定,而不是使用默认的作用域:
for(int i = 0;i& 10;++i)
for(int k = 0;k & 10;++k)
while(flag != 1)
set_value(arr[i][k]);
这段代码,看起来十分简洁,但是确实是一个很大的隐患,当我们要调试这段代码的时候,总是需要修改它的构造,而这就带来了潜在的隐患。所以建议在使用嵌套的时候,无论什么情况,都能使用{}进行包装。
综上所述,在开始编写一个标准C语言程序的时候,请先把下面这些东西写上:
#include &stdio.h&
int main(void)
只要提到代码规范,就不得不说的一个问题。
在一些小的演示程序中,也许费尽心思去构思一个 命名 是一件十分傻的行为,但是只要程序上升到你需要严正设计,思考,复查的层次,你就需要好好考虑 命名 这个问题。
函数命名:
C语言中,我们可以让下划线或者词汇帮助我们表达函数功能:
set 可以表示设置一个参数为某值
get 可以表示获取某一个参数的值
is 可以表示询问是否是这种情况
max/min 可以表示某种操作的最大(小)次数
cnt 可以表示当前的操作次数
key 某种关键值
size_t get_counts();
size_t retry_max();
int is_empty();
需要注意的只是,不要让命名过于赘述其义,只简单保留动作以及目的即可,详细功能可以通过文档来进行进一步的解释。
结构体命名:
由于结构体的 标签,不会污染命名,即标签不在命名搜索范围之内,所以可以放心使用:
有人习惯使用 typedef, 而有人喜欢使用 struct tag obj,后者比较多,但是前者也不失为一种好方法,仁者见仁智者见智。
struct inetaddr_4{
struct inetaddr_4 *addr_
typedef struct _addr{
}inetaddr_4;
inetaddr_4 *addr_info_2;
两者同处一个文件内亦不会发生编译错误。
所有字符都使用小写
含义多的可以用 _ 进行辅助
以 = 为标准进行对齐
类型, 变量名左对齐。
等号左右两端,最少有一个空格。
int main(void)
counts = 0;
inetaddr_4 *addr = NULL;
为了防止指针声明定义时候出错,将 * 紧贴着变量名总不会出错。
inetaddr_4 *addr, object, *addr_2;
其中 addr 和 addr_2 是指针,而 object 则是一个栈上的完整对象,并不是指针。
全局变量能少用就少用,必须要用的情况下,可以考虑添加前缀 g_
#define 命名
所有字符都是用大写,并用 _ 进行分割。
如果多于一个语句,使用 do{...}while(0) 进行包裹,防止 ; 错误。
#define SWAP(x, y)
当然这个交换宏实际上有一点缺陷,在大后方会提出。此处是代码规范,就不重复强调。
所有字符都是用大写,并用 _ 进行分割
与 define 相比,enum适用于同一类型的常量声明,而不是单一独立的常量。往往出现都是成组。
格式化代码
混合使用符合节俭思想,但会稍微有一点结构紊乱。
单一使用能更好让代码结构清晰。
所谓混合,单一指的是是否一直使用 {} 进行代码包裹。
有人认为 当单一语句的时候不必要添加 {},有的人则习惯添加
当作用域超过一个屏幕的时候,可以适当的使用注释来指明 {} 作用域
if(tmp == NULL){
else if(fanny == 1){
... 大概超过了一个屏幕的代码
} /*else if fanny*/
}/*end while*/
如果是代码量少的情况下,但嵌套比较多,也可以使用这个方式进行注释。
有人建议除了函数调用以外,在条件语句等类似情况下使用 () 要在关键字后空一格,再接上 ()语句,对于这一点,我个人习惯是不空格,但总有这种说法。
if (space == NULL) {
/**TODO**/
/**我习惯于如此写**/
strcpy(str1, str2); /**第一种写法是为了和函数调用写法进行区分**/
一定要放一个 default 在最后,即使它永远不会用到。
每个 case 如果需要使用新变量,可以用 {} 包裹起来,并在里面完成所有操作。
switch(...)
/**TODO**/
/**创建新变量则用 {} 包裹起来**/
call_error();
虽然许多人,许多书都提醒不再使用 goto 关键字,而是使用 setjmp 和 longjmp来取代它,但是这还是那句话,仁者见仁智者见智,如果 goto 能够让代码清晰,那何乐而不为呢,这个观点也是最近才体会到的(并非我一己之言)。
具体使用可以查询官方文档。
应该让完整的语句在每一行中,只出现一次。
对于变量声明定义亦是如此
原因是这样能让文档更有针对性
头文件保护
对于头文件而言,在一个程序中有可能被多次包含(#include),如果缺少头文件保护,则会发生编译错误
不要将 _ 作为宏的开头或者结尾。
#ifndef VECTOR_H_INCLUDE
#define VECTOR_H_INCLUDE
/**TODO**/
C语言的宏有诸多弊端,所以尽量使用 inline 函数来代替宏。在大后方会有解释
但是,请不要因此抛弃了宏,比如在 C11 中有一个新兴的宏。
第一时刻初始化所有所声明的变量,因为这么做总没有坏处,而且能减少出错的可能。
函数应该尽可能的短小,一个ANSI屏幕的为最佳。
如果某个循环带着空语句,使用 {} 进行挂载,以免出现意外。
while(*is_end++ != '\0')
虽然是空的循环体,但是写出来以免造成误循环。
尽量不要让函数返回值直接作为条件语句的判断,这样会极大降低可读性
if(is_eof(file) == 0)
if(!is_eof(file))
不要为了方便或者一点点的所谓速度提升(也许根本没有),而放弃可读性,使用嵌入式的赋值语句
int add = 10;
int num = 11;
int thr = 20;
add = add +
num = add + 20;
&&&&& 不要写成
num = (add = add + thr) + 20;
万万记住不要再使用浮点数比较彼此是否相等或不等。
如果把浮点数用在离散性的数据上,比如循环计数器,那就...
使用 #if 而不是 #ifdef
可以使用 define() 来代替 #ifdef的功能
#if !define(USERS_DEFINE)
#define USERS_DEFINE ...
对于某些大段需要消除的代码,我们不能使用注释 /**/,因为注释不能内嵌着注释(//除外),我们可以使用黑魔法:
#if NOT_DECLARATION
/**想要注释的代码**/
不要使用纯数字
意味着,不在使用毫无标记的数字,因为可能你过了几个月再看源代码的时候,你根本不知道这个数字代表着什么。
而应该使用#define 给它一个名字,来说明这个数字的意义。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 void delay延迟函数 的文章

 

随机推荐