变量赋值比较
Comparison in variable assignment
抱歉,如果这是一个愚蠢的问题,但我找不到太多信息。
我只想把比较的结果赋值给一个变量,像这样:
int a = 3, b = 2; // In actual code they're not integer literals
int result = a > b;
编译时,gcc
(带 -Wall
)没有报错,查看汇编输出我发现它被翻译成 cmp
和 setle
(或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 用法的更多信息。
抱歉,如果这是一个愚蠢的问题,但我找不到太多信息。 我只想把比较的结果赋值给一个变量,像这样:
int a = 3, b = 2; // In actual code they're not integer literals
int result = a > b;
编译时,gcc
(带 -Wall
)没有报错,查看汇编输出我发现它被翻译成 cmp
和 setle
(或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 yield1
if the specified relation is true and0
if it is false. The result has typeint
.
除非您要维护必须与 C99 之前的编译器兼容的遗留代码,否则 consider using <stdbool.h>
and bool
type 而不是 int
。
@dasblinkenlight 说的对。除此之外,我不知道你的代码,你可能需要将变量 "result" 定义为 volatile 以避免编译器优化,其中 2 和 3 是魔术值并且已经知道比较结果。 所以,尝试替换 :
int result = a > b;
和
volatile int result = a > b;
阅读有关 volatile 用法的更多信息。