【发布时间】:2021-12-04 06:56:29
【问题描述】:
在编译这个程序时它给出了错误信息。
错误:标记 ""India"" 在预处理器表达式中无效。
但在 #define COUNTRY "India" 中没有语法错误,当我使用 单引号
时也没有显示此错误消息它还在 last printf(); 中显示错误消息和多个警告。
警告:字符常量对于它的类型来说太长了
错误:预期的声明说明符或字符串常量前的“...”
最后三个 printf() 和最后两个预处理器命令也完全变灰。
#define COUNTRY "India"
#if COUNTRY == "USA"
printf("US Dollars");
#elif COUNTRY == "Bangladesh"
printf("Bangladeshi Rupees");
#elif COUNTRY == "Nepal"
printf("Nepali Rupees");
#else
printf("Indian Rupees");
#endif
【问题讨论】:
-
那么你的问题是什么? TL;DR 预处理器无法比较字符串。一切正常,您的代码无效,编译器告诉您您的代码无效。
-
是的,我正在使用预处理器来比较字符串。您能否分享一下声明预处理器无法比较字符串的资源?
-
could you please share the resource好吧,但是 C 语言标准规定了允许的内容,而不是不允许的内容。所以would be here #if 而constant-expressionis defined per here,它只是没有提到字符串比较是允许的常量表达式形式。另请参阅更多用户友好的网站:en.cppreference.com/w/c/language/constant_expression。无论如何,在普通代码中"string" == "string2"比较的是指针,而不是字符串内容,所以这是行不通的。 -
@KamilCuk,非常感谢!
标签: c c-preprocessor directive preprocessor