编译此程序时,会显示错误消息
错误:标记"&引用;印度“&引用;在预处理器表达式中无效
但是“define COUNTRY”中没有语法错误;印度“当我使用单引号时,它也不会显示此错误消息
它还在last printf()中显示错误消息和多个警告
警告:字符常量对于其类型来说太长
错误:字符串常量前应包含声明说明符或“…”
最后三个printf()的和最后两个预处理器命令也完全变灰
#定义国家“;印度“;
#如果国家/地区==”;美国“;
printf(美元);
#elif国家/地区==”;孟加拉国“;
printf(孟加拉卢比);
#elif国家/地区==”;尼泊尔“;
printf(尼泊尔卢比);
#否则
printf(印度卢比);
#恩迪夫
[来自评论]您是否可以共享资源,其中说明预处理器无法比较字符串
“定义国家”未报告任何错误;印度“因为预处理器宏可以定义为任何标记,它们不必是数字;它们可以是字符串、运算符或各种类型的多个标记
如果国家/地区==,则报告”的错误;美国“因为#if指令需要一个常量表达式。2018年C标准第6.10条第1款对此进行了规定。6.10.1 1进一步规定其应为整数常量表达式(但也可能包含定义的标识符和定义的(标识符))
6.6说:
整型常量表达式应具有整型,且仅应具有整型常量的操作数、枚举常量、字符常量、
sizeof表达式(其结果为整型常量)、\u表达式的对齐方式以及作为强制转换的直接操作数的浮动常量
字符串文字“India”和“USA”不是整型常量、枚举常量、字符常量、sizeof表达式、“u-Alignof表达式或浮动常量。因此,”if-COUNTRY==“USA”违反了C标准的约束
此外,请注意,C不会将字符串与==运算符进行比较。在“India”中,每个字符串文本将转换为其第一个元素的地址,然后将比较这两个地址。当然,任何两个不同的字符串始终具有不同的地址。但是,在“USA”中,C标准没有指定是否有两个数组都包含“USA”或者只有一个数组,因此==的计算结果可以是true或false。因此不要使用=来比较字符串。您可以使用strcmp,在<;string.h>;头中声明。(但它仍然不能在\if指令中使用。)