我最近一直在学习C,并且遇到了一些带有逻辑运算符的return语句,即
return(statement LOGIC statement);
当语句评估为True或false(即1或0)时,LOGIC是一个逻辑运算符,如&&,||等
这是一个很好的编码实践,因为对我来说似乎有点不对,使用if / else if语句会不会更好?
答案 0 :(得分:10)
这种编码习惯没有错,实际上你不需要括号。小心懒惰的评价。
return foo1() && foo2()
如果对foo1
的调用的返回值为false,则永远不会调用foo2
。
答案 1 :(得分:4)
省略if是好的编码风格。使用if cond return true else return false
过长且多余。
答案 2 :(得分:4)
我宁愿做
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
的时候。
答案 3 :(得分:0)
这取决于程序员。使用逻辑运算符并返回0或1感觉很舒服,而其他人可能感觉有点偏。
实际上,两者在工作方式上根本没有任何区别;而且我并不认为这是一个糟糕的编程习惯。
但是,if
和else
可能具有更高的可读性,因此可以帮助读者。
答案 4 :(得分:0)
重要的是你的偏好。但是,查看复杂的解决方案并实施它们通常可以帮助您理解C上的复杂细节。一个简单的演示是:
if ($value | 1 === 1)
以上内容可以用复杂的方式重写:
char mystring[10];
//assume you take the input
//to print it:
int i;
for(i=0;mystring[i]!='\0';i++)
printf("%c",mystring[i]);
这精美地展示了如何评估指针的复杂细节。理解这一点并使用它肯定会显示并帮助您更好地理解C.
所以,不要忽视复杂的表示思维,我将使用自己的简化版本。