GCC未定义签名左移的哪些方面?

max*_*zig 6 c gcc bit-shift

基本上我要求翻译:

GCC不使用C99中给出的纬度仅将签名"<<"的某些方面视为未定义,但这可能会有所变化.

(GCC 4.8.1手册,第4.5段)

给出了什么'纬度'?哪些方面?

Jen*_*edt 3

其他答案已经指出了哪些方面<<是未定义的行为。我的猜测是你想要将海湾合作委员会“翻译”成通用语言。

如果 C 标准未定义某个行为,则在发生这种情况时,编译器实现者可以采取“自由度”来执行适合他们的任何操作。特别是,他们不必对这种情况进行诊断或检测,并且可以假装它从未发生过。程序员有责任编写程序,使其行为始终得到定义。

在左移的情况下,这意味着编译器不必检查溢出,并且可以假装像这样的循环

for (int i = 1; i > 0; i <<= a) {
 .... change a in some complicated way ...
}
Run Code Online (Sandbox Code Playgroud)

永远不会终止。

您引用的句子表明他们还没有这样做,但未来版本的 gcc 可能会这样做。