变量赋值的比较

时间:2016-03-23 21:20:56

标签: c comparison-operators

很抱歉,如果这是一个愚蠢的问题,但我找不到太多信息。 我只想在变量中分配比较结果,如下所示:

int a = 3, b = 2; // In actual code they're not integer literals
int result = a > b;

编译时,gcc-Wall)没有抱怨,看着汇编输出我发现它被翻译为cmpsetle(或{{ 1}}等。我想知道它是无效的(C)代码还是被认为是不好的做法,因为我发现它从未使用过。

2 个答案:

答案 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;

详细了解易用性。