Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
格式化此语句的惯用C方式是什么_C_If Statement_Code Formatting - Fatal编程技术网

格式化此语句的惯用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这样的高级语言中,什么/如何注释是最后的选择,即使使用宽屏幕监视器,也应谨慎使用。更好的是,现在将其全部隐藏在另一个类中,并编写一些好的单元测试。