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

问题描述 投票:1回答:1

在C ++标准允许的#error指令中使用非拉丁字符?

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

#error Сообщение об ошибке
int main() { }
c++ language-lawyer directive non-latin
1个回答
2
投票

根据#error,你是否可以在C2011 5.2.1p1指令的参数中放入非ASCII字符是“locale-specific”。 #error之后的行上的标记包含不属于基本源字符集的字符;它们是否作为扩展源字符集的一部分有效是特定于语言环境的。根据annex J.4,需要记录特定于语言环境的行为,就像实现定义的行为一样。

区域设置特定和实现定义的行为之间的区别在于可能存在多个区域设置,每个区域设置都有自己的一组扩展源字符。也许只有一些扩展源字符集包括西里尔字母。在Unicode占领世界之前,C标准的这些方面在1999年最后一次修订,因此他们担心诸如将ISO 8859-5编码的源文件提供给编译器的情况,该编译器期望扩展源字符符合EUC -J.P。

无论您如何对源文件进行实际编码以及是否与编译器所期望的相匹配,如果您使用字符串文字作为#error的参数,那么您尝试执行的操作更有可能:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.