有人可以告诉我这段代码是否:
int a = 1;
int b = 0;
if (likely(a >= b))
return 1;
做同样的这个吗?
return (likely(a>= b))
非常感谢您的帮助。
最佳答案
likely
不是 C 语言的一部分。它必须由您看到它的代码的上下文以某种方式定义。 (它可能是一个扩展为编译器特定构造的宏,它告诉编译器a >= b
可能为真,这有助于优化。但是从您显示的代码中,我们不确定。)
假设 like
确实是这样一个宏,我们可以将其删除并继续处理您的实际问题:
if (a >= b)
return 1;
不与
相同return a >= b;
因为当 a 小于 b 时它们会做不同的事情。 return a >= b;
当 a 小于 b 时返回零,但是 if (a >= b) return 1;
继续到 if 语句下面的任何内容当 a 小于 b 时。
等价于 return a >= b;
的两个构造是
if (a >= b)
return 1;
else
return 0;
和
if (a >= b)
return 1;
return 0;
大多数有经验的 C 程序员宁愿看到 return a >= b;
而不是其中之一。
[附录:return likely(a >= b);
写起来很奇怪,因为函数将以任何一种方式返回,并且设置返回值的代码很短,简单,并且(通常)无分支。可以想象,它可以为 interprocedural optimization 提供提示。 , 但将这种提示表达为函数原型(prototype)上的注释会更自然,例如
extern int fstat(int fd, struct stat *st)
__attribute__((expected_return_value(0)));
(注意:据我所知,这不是真正的 GCC 函数注释。)]
关于c - 在 c 中返回 likely(x) 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39234508/