【发布时间】:2011-10-24 14:33:54
【问题描述】:
int main(void)
{
int i = 0;
i = ++i % 3;
return 0;
}
我是这样编译的:
$ gcc -Wall main.c -o main
main.c: In function ‘main’:
main.c:4: warning: operation on ‘i’ may be undefined
为什么编译器会说i 可能未定义?
【问题讨论】:
-
操作 未定义,而不是
i本身。 IE。这是未定义的行为。不要这样做。 -
@Paul R 为什么你认为操作是未定义的? ++i 将 i 递增到 1,并且以 3 为模运算器 1 给出 1 作为结果。这行不通吗?
-
@niko:看我的回答和catb.org/jargon/html/N/nasal-demons.html
-
@niko:请参阅下面 Fred 的答案以及他的答案中的链接,以进一步解释序列点等
-
@niko:我几乎不会将 gcc 称为“奇怪的实现”。对我来说似乎很受尊重,就这个问题而言,它完全符合标准。
标签: c