这个int c = (a==b)
正是我想在C程序中说的,用GCC编译。我可以做到,显然(它工作正常),但我不知道它是否可能导致未定义的行为。我的程序不会与其他编译器或其他架构一起编译。这是合法的ANSI C吗?感谢。
答案 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 + b
或a & b
等其他表达式没有什么不同。
答案 3 :(得分:0)
嗯,这取决于a
和b
的类型。如果它们是支持平等检查的类型,那么是的,它是完全合法的。