编译器升级后,我遇到了新的警告消息。
警告:整数为零的指针的有序比较[-Wextra]
Run Code Online (Sandbox Code Playgroud)if (inx > 0)
事实证明inx是一个指针。通常,我希望看到这个旧代码与0或NULL进行比较。这使我考虑了有符号和无符号的值以及可能的风险。
一些研究表明:
这些似乎表明一个地址(由malloc返回)永远不能为零。
这将我带到了标准的旧版本。
4.10指针转换
1空指针常量是整数类型的整数常量表达式(5.19)prvalue,其值为零或std :: nullptr_t类型的prvalue。空指针常量可以转换为指针类型。结果是该类型的空指针值,并且可以与指向对象或函数类型的指针的所有其他值区分开。这种转换称为空指针转换。相同类型的两个空指针值应比较相等。空指针常量到cv限定类型的指针的转换是一次转换,而不是指针转换后跟有资格转换的序列(4.4)。整数类型的空指针常量可以转换为std :: nullptr_t类型的prvalue。
它特别指出两个空指针比较相等。
考虑到这一点,那小段代码是未定义的行为吗?还是我想念的难题还有另外一块?