很抱歉,如果这是一个愚蠢的问题,但我找不到太多信息。 我只想在变量中分配比较结果,如下所示:
int a = 3, b = 2; // In actual code they're not integer literals
int result = a > b;
编译时,gcc
(-Wall
)没有抱怨,看着汇编输出我发现它被翻译为cmp
和setle
(或{{ 1}}等。我想知道它是无效的(C)代码还是被认为是不好的做法,因为我发现它从未使用过。
答案 0 :(得分:3)
这是一个完全有效的C代码。该行为在C99标准的6.5.8.6节中详细说明:
每个运算符
<
(小于),>
(大于),<=
(小于或等于)和>=
(大于或等于)如果指定的关系为真,则产生1
,如果为假,则产生0
。结果的类型为int
。
除非您维护的旧代码必须与C99之前的编译器兼容,否则consider using <stdbool.h>
and bool
type而不是int
。
答案 1 :(得分:-3)
@dasblinkenlight所说的是对的。除此之外,我不知道您的代码,您可能需要定义变量&#34; result&#34;作为volatile以避免编译器优化,其中2和3是魔术值,并且已知比较结果。 所以,试着替换:
int result = a > b;
带
volatile int result = a > b;
详细了解易用性。