如何使C中的条件语句更紧凑?

hac*_*ing 6 c conditional-statements

我有一个使用块的代码片段if-else if-elseelse if (cardLength == 16) && (numberArray[0] == 5 && (numberArray[1] == 1 || numberArray[1] == 2 || numberArray[1] == 3 || numberArray[1] == 4 || numberArray[1] == 5))例如,我想知道在不改变逻辑的情况下缩短冗长的条件语句的任何潜在方法。在Python中,我可以这样做if (cardLength == 16) and (numberArray[0:2] in range(51,56)):在 C 中是否有任何特定的语法糖可以用于此目的?

if (cardLength == 15) &&
   (numberArray[0] == 3 && (numberArray[1] == 4 || numberArray[1] == 7))
{
    printf("AMEX\n");
}
else if (cardLength == 16) &&
        (numberArray[0] == 5 && (numberArray[1] == 1 || numberArray[1] == 2 || numberArray[1] == 3 || numberArray[1] == 4 || numberArray[1] == 5))
{
    printf("MASTERCARD\n");
}
else if (cardLength == 13) && (numberArray[0] == 4)
{
    printf("VISA\n");
}
else
{
    printf("INVALID\n");
}
Run Code Online (Sandbox Code Playgroud)

小智 -1

如果您希望逻辑完整并且只想修改可读性,您可以尝试全局添加预处理器指令。这将替换您在程序中使用的任何地方的文本或内联函数。例子

#define AMEX_CONDITION (cardLength == 15) &&  (numberArray[0] == 3 && (numberArray[1] == 4 || numberArray[1] == 7))
Run Code Online (Sandbox Code Playgroud)

并在你的 if 中使用它

if(AMEX_CONDITION){
    printf("AMEX");
}
Run Code Online (Sandbox Code Playgroud)

  • 这会降低可读性。我建议添加一些“静态内联”函数 (4认同)
  • 发明自己的秘密宏语言是一个非常糟糕的主意。这比 OP 已有的情况要糟糕得多。 (4认同)