#error指令中允许使用非拉丁字符吗?

时间:2019-03-04 10:27:49

标签: c++ language-lawyer directive non-latin

C ++ Standard允许在#error指令中使用非拉丁字符吗?

例如我想用俄语写一条错误消息:

#error Сообщение об ошибке
int main() { }

1 个答案:

答案 0 :(得分:2)

根据C2011 5.2.1p1,是否可以在#error指令中放入非ASCII字符,其参数是“特定于语言环境的”。 #error之后的行中的标记包含不属于 basic 源字符集的字符;它们是否有效作为 extended 源字符集的一部分是特定于语言环境的。根据{{​​3}},需要记录特定于语言环境的行为,就像实现定义的行为一样。

特定于语言环境的行为与实现定义的行为之间的区别在于,可能存在多个语言环境,每个语言环境都有自己的扩展源字符集。也许只有一些扩展的源字符集包括西里尔字母。 C标准的这些方面最后一次修订是在Unicode接管世界之前的1999年,因此它们担心诸如将以ISO 8859-5编码的源文件馈送到期望扩展的源字符符合EUC的编译器之类的情况。 -JP。

不管您实际上如何编码源文件,以及是否与编译器期望的匹配,如果您使用字符串文字作为#error的参数,则您尝试执行的操作更有可能起作用:< / p>

#error "Сообщение об ошибке"

这是因为某些编译器允许在字符串文字中使用比在标识符中更多的字符。