多性格常数,我做错了什么? C

时间:2014-04-10 09:54:47

标签: c

if( ( !valInput(st1,0) ) || (st1[0] < '0') || (st1[0] > 'M-1') )

收到警告:多字符常量 在M char上,在&#39; 0&#39; ......为什么?

M是在编译中用数字9 \

替换的已定义变量
 #define M 9

我的用法是检查第一个字母是否偶然小于&#39; 0&#39;或大于&#39; 8&#39; (对于8个字符,我有义务使用M定义的)

我们将不胜感激的任何帮助。 感谢

4 个答案:

答案 0 :(得分:4)

由于代码中引用了M,因此预处理器不会替换它。 (此规则适用于单字符和带引号的字符串。)

因此编译器看到'M-1'是一个多字符常量文字。

如果您想将st1[0]与&#39; 8&#39;的ascii值进行比较那么最简单的方法就是使用M - 1 + '0'

答案 1 :(得分:1)

(st1[0] > 'M-1')

应该是

(st1[0] > M-1)

'M-1'本身是一个多字符常量,将被计算为整数。

答案 2 :(得分:0)

如果M是定义为9的预处理器宏(而不是数字字符'9'),并且您正在比较字符,则必须在减去一个字符之前转换为字符:

if( ( !valInput(st1,0) ) || (st1[0] < '0') || (st1[0] > ('0' + M - 1) )

'0'与整数9(来自M)一起添加,后者变为字符'9',然后从中减去1以获得{{1} }}

答案 3 :(得分:0)

'M-1'不是您的预期。 M没有被8替换。

您可以使用(st1[0] > (char)(M-1))