【发布时间】:2017-07-02 15:40:57
【问题描述】:
我有这样的代码:
$ cat test.c
#include <stdio.h>
typedef struct
{
const int x;
} SX;
static SX mksx(void)
{
return (SX) { .x = 10 };
}
void fn(void)
{
SX sx;
while((sx = mksx()).x != 20)
{
printf("stupid code!");
}
}
以及关于其正确性的2个意见:
$ for i in gcc clang; do echo "$i SAYS:"; $i -c -std=c99 -pedantic -Werror test.c; done
gcc SAYS:
test.c: In function ‘fn’:
test.c:15:2: error: assignment of read-only variable ‘sx’
while((sx = mksx()).x != 20)
^
clang SAYS:
哪个编译器是正确的?
【问题讨论】:
-
我会说你应该考虑 GCC,它被广泛使用(甚至最新的 GCC 4.8.1 也会出现同样的错误)。这个务实的理由应该足以避免这样的编码。
-
他可能只是想知道要针对哪个编译器提交错误报告。 (同样有效的答案可能是“都不是”)