【发布时间】:2022-11-29 11:26:59
【问题描述】:
void main() {
unsigned int a = 0;
if (a - 10 < 0) {
printf("error!\n");
}
}
我们知道这种比较是行不通的,因为 a-10 是一个很大的无符号整数,它不能小于 0。
为了避免这种情况,我尝试这样做:
void main() {
unsigned int a = 0;
int b = 0;
if (a - 10 < b) {
printf("error!\n");
}
}
这将使用 Visual Studio 2022 17.2.4 获得 warning C4018。
但是,当我使用 gcc 4.8.5 时,根本没有任何警告。
有没有办法避免编码器将有符号数与无符号变量进行比较?
【问题讨论】:
-
为什么不这样做呢?
(int)a - 10
标签: c visual-studio security gcc