我最近在学习C语言,发现了一些带有逻辑运算符的返回语句,例如:
return(statement LOGIC statement);
当语句评估为True或false(即1或0)时,LOGIC是逻辑运算符,如&&、||等。
这种写法是否是良好的编码实践呢?对我来说似乎有点不对劲,使用if/else if语句不是更好吗?
我最近在学习C语言,发现了一些带有逻辑运算符的返回语句,例如:
return(statement LOGIC statement);
当语句评估为True或false(即1或0)时,LOGIC是逻辑运算符,如&&、||等。
这种写法是否是良好的编码实践呢?对我来说似乎有点不对劲,使用if/else if语句不是更好吗?
这种编码方式没有问题,实际上你不需要使用括号。要注意惰性求值。
return foo1() && foo2()
如果调用 foo1
的返回值为 false,则 foo2
不会被调用。
我宁愿做
return a && b;
或者
int result = a && b;
return result;
只是因为出错的机会更少。如果您编写
if ( a && b )
return true;
else
return false;
false
时实际想要返回true
,反之亦然)。这不是一个重大的风险,但是确实存在。在C99引入内置符号常量true
和false
之前,人们通常会定义自己的TRUE
和FALSE
宏。问题是,有些人偶尔会拼错0
和1
。我曾经花了一个下午来追踪自己的错误,因为有人放弃了一个头文件,其中TRUE
和FALSE
扩展成了相同的值。巧合的是,那时我开始使用return expr
而不是return TRUE
或return FALSE
。if cond return true else return false
过于冗长和多余。这完全取决于程序员。有些人感觉使用逻辑运算符并返回0或1很舒适,而另一些人可能会感到有点不自然。
实际上,在工作方式上两者没有任何区别;我也不认为这是不好的编程习惯。
但是,if
和else
可以更易读,从而帮助读者。
这取决于您的个人喜好。但是,查看复杂的解决方案并实施它们通常有助于您理解C语言中的复杂细节。一个简单的示例是:
char mystring[10];
//assume you take the input
//to print it:
int i;
for(i=0;mystring[i]!='\0';i++)
printf("%c",mystring[i]);
上述内容可以用更复杂的方式重写:
char *ch;
for(ch=mystring; *ch; ch++)
printf("%c",*ch);
这个漂亮地展示了指针如何被评估的复杂细节。理解并使用它肯定能够帮助你更好地理解C语言。
因此,请不要忽视这个复杂的表示,认为我会使用自己简化的版本。
for(ch=mystring; *ch; ch++)
吗? - Weather Vane
&&
是不好的编程习惯或者使用三目运算符是邪恶的。这取决于可读性、个人偏好等因素。 - cadanilukreturn
,则不需要使用else
。 - Weather Vane