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

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

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

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

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

最佳答案

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

特定于语言环境的行为和实现定义的行为之间的区别在于,可能有多个语言环境,每个语言环境都有自己的一组扩展源字符。也许只有一些扩展的源字符集包括西里尔字符。 C 标准的这些方面最后一次修订是在 1999 年,在 Unicode 接管世界之前,因此他们担心将以 ISO 8859-5 编码的源文件提供给期望扩展源字符符合 EUC 的编译器等场景-日本。

无论您实际上如何对源文件进行编码以及它是否符合编译器的预期,如果您使用字符串文字作为 #error 的参数,您尝试做的事情更有可能起作用。 :

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

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

关于c++ - #error 指令中是否允许使用非拉丁字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54981283/

相关文章:

c++ - 通常在 C++ 中使用 const 指令,特别是在 Tiny XML 库中 :

c++ - 为什么 valgrind 在内存泄漏检测期间被杀死?

c++ - 如何在 win32 GUI 应用程序中向用户显示快速更新的数据?

dynamic - 动态创建 ng-pattern 的指令

ios - #define 指令上的这个错误是什么?

c++ - 如何处理大数?

c++ - GCC 的 std::invocable 实现是不正确的还是不完整的?

c++ - `constexpr` 函数可以在 C++ 中前向声明吗?

括号中带有返回语句的 C++ nrvo/copy elision

javascript - 如何在 Angular 指令的链接函数中引用一个值?