[声明]:本文章为博主自学C语言时遇到的困惑,如有不正,欢迎指出

目录

一、优秀的代码可读性强

二、不好的代码风格可能产生的影响

1.人为误会

2.逻辑理解

3.健壮性

三、C语言混乱代码大赛(IOCCC)

一、优秀的代码可读性强

养成良好的代码风格是成为优秀程序员的基本,优秀的代码应该具有良好的可读性

我们先来看一段代码

int main(void) {
	int i=0;for(i=1;i<=100;i++)if(i%2==1)printf("%d ",i);return 0;
}

我们可以只用一行代码实现判断1~100内的所有奇数,外行人看了直呼大神,内行人老人地铁手机这段代码虽然可以成功运行,但可读性一言难尽

当你写完一大长篇代码时成就满满,认为只有你和上帝可以看懂你的代码,等到第二天醒来,现在只有上帝看得懂了()

所以良好的代码风格不仅可以让学习更高效,还可以统合你的团队

我们更改上段代码的风格,按语句分成不同行

int main(void) {
	int i = 0;
	for (i = 1; i <= 100; i++) 
		if (i % 2 == 1) 
			printf("%d ", i);
	return 0;
}

现在看来代码就清晰了很多,但这种写法在某些情况下会让人产生误会,如下

二、不好的代码风格可能产生的影响

1.人为误会

int a = 5;
int b = 20;
if (1 == a)
	if (b == 20)
		printf("Never Gonna Give You Up\n");
else
		printf("Never Gonna Let You Down\n");

此处代码执行不会打印任何值,else 应该与距离其最近的 if(b == 20) 匹配,两者包含于 if(1 == a)之中,所以判断 1 != a 时,便会直接跳出此 if 语句,不会执行打印

但我们不能每次都去找距离 else 最近的 if 吧, 所以我们给这段代码加上大括号

if (1 == a)
{
	if (20 == b)
		printf("Never Gonna Give You Up\n");
	else
		printf("Never Gonna Let You Down\n");
}

这样就避免了误会,当然里侧我们也可以加上大括号

if (1 == a)
{
	if (20 == b)
	{
		printf("Never Gonna Give You Up\n");
	}
	else
	{
		printf("Never Gonna Let You Down\n");
	}
}

 这里对于大括号的使用风格会有差异,比如很多辅导书为了节约空间,会写成这样

if (1 == a){
	if (20 == b){
		printf("Never Gonna Give You Up\n");
	}
	else{
		printf("Never Gonna Let You Down\n");
	}
}

2.逻辑理解

这里还有另外一个大同小异的例子,这两段代码是否相同?

//CODE 1
if (a > 0) {
	return 0;
}
return 1;

//CODE 2
if (a > 0) {
	return 0;
}
else {
	return 1;
}

输出结果是相同的,不过要注意,这两段代码在逻辑上是不同

CODE 1 中 if(a > 0) 若判定为假,则会跳出 if 继续向下执行,结果为返回 1

CODE 2 中 if(a > 0) 若判定为假,则会执行 else ,结果为返回 1

虽然结果相同,但这里建议使用 CODE 2 的代码风格

3.健壮性

初学者在初学C语言时时常会把 '=' 和 '==' 的意义搞混,当然即便是大佬也可能会在高强度工作时不小心打错代码,这里我们想判断 a 是否 等于 5

int a = 3;
if (a == 5) {
	printf("a = %d\n", a);//5
}
if (a = 5) {
	printf("a = %d\n", a);//5
}

赋 a 初值为 3 ,本不应该执行打印,但由于打错代码,将判断 a 是否等于 5 写成了将 5 赋值给 a ,这样结果当然是 a == 5,执行打印

这个问题的严重性在于它属于逻辑错误,也就是语法上并没有错误,程序可以正常运行,编译器不会检测出错,所以一旦发生这个错误,我们是很难发现的

 虽然编译器不够聪明,但我们人类很聪明,这里推荐下面这种写法

if (5 == a) {
	printf("a = %d\n", a);//5
}
if (5 = a) {
	printf("a = %d\n", a);//5
}

我们仅交换了 a 与 5 的位置,倘若发生上面那种错误,这时编译器就会报错,这是为什么呢?

因为 5 它不是一个 左值,不能给它赋值,产生了语法错误,这是编译器可以检测出来的,通过这种写法,我们就可以及时得知自己的错误,提高了代码的健壮性

三、C语言混乱代码大赛(IOCCC)

当然,并不是说不规规矩矩的代码就完全没用,国际C语言混乱代码大赛(IOCCC),都是世界顶级C语言开发者的娱乐作品,除去乏味的工作,你还可以让代码写出宅男艺术感

更多推荐

C语言:代码风格