return C 语句中的逻辑运算符
Logic operators in return statement in C
我最近在学习C,并且遇到了一些return语句中包含逻辑运算符,即
return(statement LOGIC statement);
其中语句的计算结果为 True 或 false(即 1 或 0),LOGIC 是逻辑运算符,如 &&、||等等
这是好的编码习惯吗,因为我觉得有点不对劲,使用 if/else if 语句不是更好吗?
这种编码实践没有任何问题,实际上您不需要括号。谨防懒惰评估。
return foo1() && foo2()
如果调用 foo1
的 return 值为 false foo2
永远不会被调用。
这取决于程序员。很少有人愿意使用逻辑运算符和 return 0 或 1,而其他人可能会觉得有点不对劲。
实际上,两者在工作方式上没有任何区别;而且我并不完全认为这是一种糟糕的编程习惯。
但是,是的,if
和 else
可能具有更高的可读性,从而帮助读者。
省略 if 是很好的编码风格。使用 if cond return true else return false
太长且多余。
重要的是您的喜好。但是,查看复杂的解决方案并实现它们通常可以帮助您理解 C 语言的复杂细节。一个简单的演示是:
char mystring[10];
//assume you take the input
//to print it:
int i;
for(i=0;mystring[i]!='[=10=]';i++)
printf("%c",mystring[i]);
上面可以用复杂的方式重写:
char *ch;
for(ch=mystring; *ch; ch++)
printf("%c",*ch);
这很好地展示了如何评估指针的复杂细节。理解这一点并使用它肯定会显示并帮助您更好地理解 C。
所以,不要忽视复杂的表示,我将使用我自己的简化版本。
我更愿意
return a && b;
或
int result = a && b;
return result;
只是因为搞砸的机会少了。如果你写
if ( a && b )
return true;
else
return false;
你总是 运行 有错误理解测试意义的风险(即 returning false
当你想要 return true
和 vice-versa)。这不是 重大 风险,但它确实存在。
在 C99 为 true
和 false
引入 built-in 符号常量之前,人们通常定义自己的 TRUE
和 FALSE
宏。问题是,其中一些人偶尔会 mis-spell 0
和 1
。我曾经花了一个下午追着我的尾巴,因为有人丢了一个 header,其中 TRUE
和 FALSE
扩展为 相同的值 。
并非巧合,那是我开始使用 return expr
而不是 return TRUE
或 return FALSE
的时候。
我最近在学习C,并且遇到了一些return语句中包含逻辑运算符,即
return(statement LOGIC statement);
其中语句的计算结果为 True 或 false(即 1 或 0),LOGIC 是逻辑运算符,如 &&、||等等
这是好的编码习惯吗,因为我觉得有点不对劲,使用 if/else if 语句不是更好吗?
这种编码实践没有任何问题,实际上您不需要括号。谨防懒惰评估。
return foo1() && foo2()
如果调用 foo1
的 return 值为 false foo2
永远不会被调用。
这取决于程序员。很少有人愿意使用逻辑运算符和 return 0 或 1,而其他人可能会觉得有点不对劲。
实际上,两者在工作方式上没有任何区别;而且我并不完全认为这是一种糟糕的编程习惯。
但是,是的,if
和 else
可能具有更高的可读性,从而帮助读者。
省略 if 是很好的编码风格。使用 if cond return true else return false
太长且多余。
重要的是您的喜好。但是,查看复杂的解决方案并实现它们通常可以帮助您理解 C 语言的复杂细节。一个简单的演示是:
char mystring[10];
//assume you take the input
//to print it:
int i;
for(i=0;mystring[i]!='[=10=]';i++)
printf("%c",mystring[i]);
上面可以用复杂的方式重写:
char *ch;
for(ch=mystring; *ch; ch++)
printf("%c",*ch);
这很好地展示了如何评估指针的复杂细节。理解这一点并使用它肯定会显示并帮助您更好地理解 C。
所以,不要忽视复杂的表示,我将使用我自己的简化版本。
我更愿意
return a && b;
或
int result = a && b;
return result;
只是因为搞砸的机会少了。如果你写
if ( a && b )
return true;
else
return false;
你总是 运行 有错误理解测试意义的风险(即 returning false
当你想要 return true
和 vice-versa)。这不是 重大 风险,但它确实存在。
在 C99 为 true
和 false
引入 built-in 符号常量之前,人们通常定义自己的 TRUE
和 FALSE
宏。问题是,其中一些人偶尔会 mis-spell 0
和 1
。我曾经花了一个下午追着我的尾巴,因为有人丢了一个 header,其中 TRUE
和 FALSE
扩展为 相同的值 。
并非巧合,那是我开始使用 return expr
而不是 return TRUE
或 return FALSE
的时候。