变量赋值比较

Comparison in variable assignment

抱歉,如果这是一个愚蠢的问题,但我找不到太多信息。 我只想把比较的结果赋值给一个变量,像这样:

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

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

这是一个完全有效的 C 代码。该行为在 C99 标准的第 6.5.8.6 节中有详细说明:

Each of the operators < (less than), > (greater than), <= (less than or equal to), and >= (greater than or equal to) shall yield 1 if the specified relation is true and 0 if it is false. The result has type int.

除非您要维护必须与 C99 之前的编译器兼容的遗留代码,否则 consider using <stdbool.h> and bool type 而不是 int

@dasblinkenlight 说的对。除此之外,我不知道你的代码,你可能需要将变量 "result" 定义为 volatile 以避免编译器优化,其中 2 和 3 是魔术值并且已经知道比较结果。 所以,尝试替换 :

int result = a > b;

volatile int result = a > b;

阅读有关 volatile 用法的更多信息。