评估作业的右侧

时间:2012-02-09 20:09:37

标签: c gcc syntax

这个int c = (a==b)正是我想在C程序中说的,用GCC编译。我可以做到,显然(它工作正常),但我不知道它是否可能导致未定义的行为。我的程序不会与其他编译器或其他架构一起编译。这是合法的ANSI C吗?感谢。

4 个答案:

答案 0 :(得分:4)

这完全合法。如果a等于b,那么c将为1.否则,它将为0.

答案 1 :(得分:1)

int c = (a == b);

这是完全合法的。初始化是C标准的一部分(C99§6.7.8),右侧可以是任何赋值表达式,包括a == b(当然,假设a b已定义且具有可比类型。)

答案 2 :(得分:1)

如果在块范围内声明c,则完全有效。

在文件范围声明时,它无效,因为初始值设定项必须是常量表达式。

a == b是一个表达式,在这个意义上与a + ba & b等其他表达式没有什么不同。

答案 3 :(得分:0)

嗯,这取决于ab的类型。如果它们是支持平等检查的类型,那么是的,它是完全合法的。