warning: this decimal constant is unsigned only in ISO C90

本文详细解析了C90编译器关于无符号整数的规则,并指导如何处理'unsigned only in ISO C90'警告,提供了解决方案,包括忽略、指定类型、改变编译标准和使用十六进制。建议升级编译设置以避免潜在问题。
摘要由CSDN通过智能技术生成

编译警告信息

warning: this decimal constant is unsigned only in ISO C90

原因:数字超出默认类型int型的表示范围。

在gcc中缺省使用C90标准编译,编译器将按C90标准将你的-2147483648转成无符号的十进制(但不影响你的结果)。

解决方法:

1:不用管。

2:在该数字后加u(大小写无关),变为无符号整型(0~4294967295)。

3:在gcc的编译选项中加 --std=c99

4:使用十六进制的数字,如0xFFFFFFFF

The C90 rule that the default type of a decimal integer constant is either int, long, or
unsigned long, depending on which type is large enough to hold the value without overflow,
simplifies the use of constants. The choices in C99 are int, long and long long.
C89 added the suffixes U and u to specify unsigned numbers. C99 adds LL to specify long
long.
Unlike decimal constants, octal and hexadecimal constants too large to be ints are typed as
unsigned int if within range of that type, since it is more likely that they represent bit
patterns or masks, which are generally best treated as unsigned, rather than “real” numbers.
Little support was expressed for the old practice of permitting the digits 8 and 9 in an octal
constant, so it was dropped in C89.
A proposal to add binary constants was rejected due to lack of precedent and insufficient utility.
Despite a concern that a “lower-case-l” could be taken for the numeral one at the end of a
numeric literal, the C89 Committee rejected proposals to remove this usage, primarily on the
grounds of sanctioning existing practice.
搞明白了吧,出现这个告警,其实也是gcc提醒你该升级你的编译选项了。不过最安全的还是使用十六进制,或者加上UL或者ULL这样的说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值