我最近开始用C编程,并且想知道一种更简洁的方法来编写一个返回1或-1的简单函数,具体取决于两个int值的相等性。我写的:
int valueCompare(int i, int j) {
if (i != j) {
return -1;
}
else {
return 1;
}
}
它可读但似乎效率低下。我见过使用冒号和问号的return语句,但是我不熟悉那种风格。有没有人建议如何在不损失可读性的情况下为此编写更有效的函数?
答案 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;
}