Pet*_*vaz 5 c gcc language-lawyer
默认情况下,signed overflow是未定义的行为.
我对gcc的理解(基于https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html和-wwrapv做了什么?)是使用-fwrapv使gcc将签名溢出视为定义良好行为.
但是,对另一个问题的评论似乎表明,即使打开此标志,签名溢出仍然是未定义的行为.
是否使用-fwrapv在gcc中定义了溢出?如果没有,那么-fwrapv的目的是什么?
鉴于海湾合作委员会的文件说:
-fwrapv此选项指示编译器假设加法,减法和乘法的带符号算术溢出使用二进制补码表示.
我将其描述为一个特定于实现的扩展,为标准C中未定义的行为提供明确定义的行为 - 当且仅当底层硬件以这种方式运行时.
迂腐地说,我认为它仍然是C标准的未定义行为,但是你指示编译器以特定的,非便携但可预测的方式行事.