是否可以在 C 语言的 return 语句中插入 if 条件?

0 c coding-style

我的目的是尝试编写一个尽可能简洁的函数。

int func(void)
{
    int a;
    return (
        a = 42,
        a++,
        if (a > 42) a *= -1,
        a);
}
Run Code Online (Sandbox Code Playgroud)

我本来期待返回-43。相反,我遇到了编译错误。

Har*_*ith 6

\n

我的目的是尝试编写一个尽可能简洁的函数。

\n
\n
int a;\n\nreturn (\n   a = 42,\n   a++,\n   if (a > 42) a *= -1,\n   a);\n
Run Code Online (Sandbox Code Playgroud)\n

可以简单地改写为:

\n
return -43;\n
Run Code Online (Sandbox Code Playgroud)\n

或者,如果这对您来说太短,那么您需要寻找条件运算符(俗称三元运算符),其形式为:

\n
/* if a is logically true (does not evaluate to zero) \n*  then evaluate expression b, otherwise \n*  evaluate expression c\n*/\na ? b : c;\n
Run Code Online (Sandbox Code Playgroud)\n

所以该return语句可以重写为:

\n
a = 42;\nreturn ++a > 42 ? -a : a;\n
Run Code Online (Sandbox Code Playgroud)\n
\n

就你的目标而言,它没有任何优点。你不应该编写聪明的代码。它损害了可读性和可维护性。(尽管在本例中,情况并非如此)

\n

记住:

\n
    \n
  1. 简单就是\n终极的复杂。\n\xe2\x80\x94达芬奇
  2. \n
  3. 任何傻瓜都可以编写\n计算机可以理解的\n代码。优秀的\n程序员会编写\n人类可以理解的\n代码。\xe2\x80\x95马丁\n福勒
  4. \n
  5. 一切都应该尽可能简单\xe2\x80\x94\n但不能更简单。\xe2\x80\x94 艾伯特\n爱因斯坦(归因)。\xc2\xb9
  6. \n
\n
\n

[1] \xe2\x80\x94 信用:@SteveSummit

\n