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定义的)
我们将不胜感激的任何帮助。 感谢
答案 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))
。