格式化此语句的惯用C方式是什么
我提出了一个难以阅读的格式化此语句的惯用C方式是什么,c,if-statement,code-formatting,C,If Statement,Code Formatting,我提出了一个难以阅读的if语句,我无法找到最好的方法来格式化它的布局,使它更具可读性,并用C语言实现 if (((value == intMax) && (intMax != 0)) || // Deals with upper bound (value > (intMax/10)) || ((value == (intMax/10)) && (digitAdjusted > digitLastIntMax)) || ((val
if
语句,我无法找到最好的方法来格式化它的布局,使它更具可读性,并用C语言实现
if (((value == intMax) && (intMax != 0)) || // Deals with upper bound
(value > (intMax/10)) ||
((value == (intMax/10)) && (digitAdjusted > digitLastIntMax)) ||
((value == intMin) && (intMin != 0)) || // Deals with lower bound
(value < (intMin/10)) ||
((value == (intMin/10)) && (digitAdjusted < digitLastIntMin))) {
// Some code
}
if(((value==intMax)&&&(intMax!=0))|///处理上界
(值>(intMax/10))||
((value==(intMax/10))&&(digitAdjusted>DigitStartMax))||
((value==intMin)&&(intMin!=0))| |//处理下界
(值<(整数/10))||
((value==(intMin/10))&&(digitAdjusted
如果这是SO的不当用法,请让我知道-我将删除此问题。实际上,由于
&&
在|
之前,因此不需要内括号-您可以删除它们
另外:(intMin!=0)
与刚才的intMax
相同
if ((value == intMax) && intMax || // Deals with upper bound
(value > intMax/10) ||
(value == intMax/10) && (digitAdjusted > digitLastIntMax) ||
(value == intMin) && intMin || // Deals with lower bound
(value < intMin/10) ||
(value == intMin/10) && (digitAdjusted < digitLastIntMin)) {
// Some code
}
if((value==intMax)&&intMax | |//处理上界
(值>整数最大值/10)||
(value==intMax/10)和&(digitAdjusted>DigitStartMax)||
(value==intMin)&&intMin | |//处理下限
(值
我将把每个由|
分隔的子句放入返回布尔值的函数中
if ( test1(value, intMax) || // ((value == intMax) && (intMax != 0)) || // Deals with upper bound
test2(value, intMax) || // (value > (intMax/10)) ||
test3(value, intmax, digitAdjusted, digitLastIntMax) || // ((value == (intMax/10)) && (digitAdjusted > digitLastIntMax)) |
test4(value, intMin) // ((value == intMin) && (intMin != 0)) || // Deals with lower bound
test5(value, intMin) || // (value < (intMin/10)) ||
test6(value, intMin, digitAdjusted, digitLastIntMin) //((value == (intMin/10)) && (digitAdjusted < digitLastIntMin))
)
{
// Some code
}
if(test1(value,intMax)| |/((value==intMax)和&(intMax!=0))处理上界
test2(value,intMax)| |/(value>(intMax/10))||
test3(value,intmax,digitaladjusted,digitalasttmax)| |/((value==(intmax/10))&&(digitaladjusted>digitalasttmax))|
test4(value,intMin)//((value==intMin)&&&(intMin!=0))| |//处理下限
测试5(值,intMin)| |/(值<(intMin/10))||
test6(value,intMin,digitAdjusted,digitLastIntMin)/((value==(intMin/10))&&(digitAdjusted
如果您想让它更具可读性,请使用嵌套的ifs,并在注释中对每个阶段所做的工作进行很好的解释。在一行上完成这一切并没有多大实际好处,而且看起来确实不可读。垂直排列会有一点帮助,但真正的问题是,“您试图实现的需求是什么?”。这看起来有点像在试图避免溢出时将输入字符串转换为整数,但在这种情况下,intMin检查没有意义。多了解一些情况可能有助于解决这个问题
if (((value == intMax) && (intMax != 0)) || (value > (intMax/10)) || ((value == (intMax/10)) && (digitAdjusted > digitLastIntMax)) ||
((value == intMin) && (intMin != 0)) || (value < (intMin/10)) || ((value == (intMin/10)) && (digitAdjusted < digitLastIntMin)) )
if(((value==intMax)&&&(intMax!=0))| |(value>(intMax/10))| |((value==(intMax/10))&&&(digitAdjusted>DigitLastMax))||
((value==intMin)和&(intMin!=0))| |(value<(intMin/10))| |((value==intMin/10))&&&(digitAdjusted
请注意,垂直对齐会使按位或与逻辑或的错误立即变得明显。因此,根据我收到的所有建议,我想到了这一点
// Upper bound
maxReached = (value == intMax) && (intMax != 0);
maxDivTenExceeded = value > (intMax/10);
maxLastDigitExceeded = (value == (intMax/10)) && (digitAdjusted > digitLastIntMax);
// Lower bound
minReached = (value == intMin) && (intMin != 0);
minDivTenExceeded = value < (intMin/10);
minLastDigitExceeded = (value == (intMin/10)) && (digitAdjusted < digitLastIntMin);
// Stop conditions
stopMax = maxReached || maxDivTenExceeded || maxLastDigitExceeded;
stopMin = minReached || minDivTenExceeded || minLastDigitExceeded;
// Prevent integer overflow
if (stopMax || stopMin) {
// Code
}
//上限
MaxReach=(value==intMax)&&(intMax!=0);
MaxDivTeneExceed=value>(intMax/10);
MaxLastDigiteExceeded=(value=(intMax/10))&&(digitAdjusted>DigitLastTmax);
//下限
minreach=(value==intMin)&(intMin!=0);
MinDivTeneExceed=值<(intMin/10);
MinLastDigiteExceed=(value=(intMin/10))&(digitAdjusted
最近的gcc版本建议添加这些括号,不是吗?此外,相等运算符的优先级低于除法,因此增加了一些括号。谢谢,jpw!事实上,我认为你可以去掉所有嵌套的括号,但可能会以清晰度为代价。我会还原intMax!=0
但是为了可读性,请进行测试。您的OR之一是按位的,而不是逻辑的…如果不将每个主要条件委托给具有适当名称的函数,则无法使其可读。当然,这是一种观点。在第3行中使用按位或有什么原因吗?我不认为这有什么区别,虽然有些情况下它会(foo()| | bar()不计算bar(),如果foo()返回true;foo()| bar()计算)。@pat那一个在粘贴中丢失了,谢谢你的注意:)@duedl0r如果你能扩展一点,得到一个答案,我会很感激的,但是它不是太冗长了吗?我认为它会在稍微冗长的情况下为代码带来清晰。@Morganwide太冗长了吗?目标是可理解性。代码是为程序员编写的。例如,虽然我理解你的每一行代码,但我不知道它的用途,几周后,你将处于相同的位置。@TonyHopkinson我很欣赏你的论点,这就是为什么我要问这个问题。尽管如此,我还是可以保留我的保留意见,并检查它们是否有充分的根据(在本例中是冗长的)。作为我职业生涯中大部分时间主要从事维护编码的人,请放心,那些追求简洁(简练是非常好的)的人在我的圣诞问候语列表中并不高。:)在Java和嵌套ifs这样的高级语言中,什么/如何注释是最后的选择,即使使用宽屏幕监视器,也应谨慎使用。更好的是,现在将其全部隐藏在另一个类中,并编写一些好的单元测试。