更简明的退货声明

时间:2016-01-20 05:58:44

标签: c

我最近开始用C编程,并且想知道一种更简洁的方法来编写一个返回1或-1的简单函数,具体取决于两个int值的相等性。我写的:

int valueCompare(int i, int j) {
    if (i != j) {
        return -1;
    }
    else {
        return 1;
    }
}

它可读但似乎效率低下。我见过使用冒号和问号的return语句,但是我不熟悉那种风格。有没有人建议如何在不损失可读性的情况下为此编写更有效的函数?

4 个答案:

答案 0 :(得分:5)

您可以使用三元运算符:

int valueCompare(int i, int j) 
{
    return (i == j) ? 1 : -1;
}

答案 1 :(得分:3)

为了便于阅读,请考虑重写函数以使用布尔逻辑:

#include <stdbool.h>

bool isEqual (int i, int j) {
  return i == j;
}

在我看来,这是最可读的形式。

或者,对于通用编程/可移植性/实用性,您应该制定C编程事实上的标准&#34;仿函数&#34;价值比较:

int compare_int (const void* i1, const void* i2)
{
  const int* ip1 = i1;
  const int* ip2 = i2;
  return *ip1 - *ip2;
}

这有很多好处:

  • 通用功能格式。
  • 标准。可以传递给bsearch, qsort等函数
  • 混合相等,小于和大于单个函数中的检查。
  • 与恐龙编译器兼容。

答案 2 :(得分:2)

它是可读的,编译器有责任使其高效。任何&#34;聪明&#34;写作方式将不太可读并且更有效率。

基本上,当只有一个陈述时,我会将其留在省略括号,即使这是一个品味问题:

if(i != j)
    return -1;
else
    return 1;

VS

if(i != j) {
    return -1;
} else {
    return 1;
}

VS

if(i != j)
{
    return -1;
}
else
{
    return 1;
}

当然,我可以想到很多&#34;聪明的&#34;从

写出来的方式
return (i != j) ? -1 : 1;

仅适用于简单表达式(即这是正常的,但抛出几个函数调用,这将是完全不可读的)

return 2 * (i == j) - 1;

这几乎不可读。但是,您应该能够理解它,因为可能在野外看到这种事情。

并且两者都没有什么可以使它们更有效率。

答案 3 :(得分:0)

怎么样

#define SAME_VALUE 1
#define DIFFERENT_VALUE -1

还是喜欢? <怎么样

 int valueCompare (int i, int j){
         return i == j;
    }