作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑一个具有 UNIX 行结尾的 C++ 文件(即 '\x0a'
而不是 "\x0d\x0a"
)并包含以下原始字符串文字:
const char foo[] = R"(hello^M
)";
(其中 ^M
是实际字节 0x0d(即回车符))。
以下字符串比较的结果应该是什么(考虑原始字符串文字的标准定义)?
strcmp("hello\r\n", foo);
字符串比较是否应该相等? (即 0
或 !=0
?)
与 GCC 4.8(在 Fedora 19 上)相比,它们是不平等的。
这是 GCC 中的错误还是功能?
最佳答案
就标准而言,您只能在字符串文字(以及程序中的其他位置)中使用基本源字符集的成员。程序的物理表示如何映射到基本源字符集是实现定义的。
g++ 显然认为 ASCII \x0A
、ASCII \x0D
和 ASCII \x0D\x0A
都是 成员的有效表示基本源字符集称为“换行符”。这是完全合理的,因为希望在 Windows、Unix 和 Mac OS X Classic 机器之间传输源代码以保持其含义。
关于c++ - 原始字符串文字中的回车符+换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878093/
我是一名优秀的程序员,十分优秀!