行尾的双反斜杠有什么作用
What does a double backslash at the end of a line do?
我在工作中查看了一些C++代码,偶然发现了这样的东西:
char numberlist[5000] =
"{42, 42, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, \
// A few more lines, all ending in double-backslash
42, 42, 42, 42, 42}";
(内容经过编辑以保护其可能意味着什么)。现在,我确实知道一行末尾的单个反斜杠会吞噬下一个换行符,基本上将两行连接起来。但是双反斜杠?
我在这里收到警告:
警告 C4129: ' ' : 无法识别的字符转义序列
字符串的语法突出显示在第一个双反斜杠行的末尾停止(在 VS2010 中)。可能是反斜杠换行符首先被吃掉,然后剩余的反斜杠空格被解释为转义序列吗?在这里删除第二个反斜杠是否安全?
由于双反斜杠位于字符串文本内,因此其含义很明确:它解析为字符串中的单个字符。
字符串继续使用文字换行符,这使得源在语法上无效C++,这也是语法突出显示在该点停止的原因。显然,Visual C++ 无论如何都允许这样的字符串(就像 g++ 一样),因此编译成功。
无法识别的字符转义序列的警告似乎无关,因为<newline>
和\
本身都是有效的转义。
显然我的预感是正确的,这首先删除了反斜杠换行序列,该序列留下了反斜杠空格,它会发出警告并解析为一个空格。我刚刚查看了调试器以确认字符串本身没有反斜杠。因此,删除第二个反斜杠不会改变代码的含义(并删除警告,或者更确切地说是 15 个左右)。
相关文章:
- archive_read_support_filter_all() 有什么作用?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- DrawShadow 中的 Elevation 究竟有什么作用?
- 测试"stream >> char"有什么作用?
- "uFlags &= ~CHN_PANNING"命令有什么作用?
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- int** a = new int*[n]();这个函数有什么作用?
- C++ 此函数调用之前的(void)有什么作用?
- i+=(i&-i) 有什么作用?它是便携式的吗?
- 这个size_t在 lambda 中有什么作用?C++代码
- 数组下标运算符 ([ ]) 对数组有什么作用?
- 结构之外的节点 * head 有什么作用?
- 重载括号运算符有什么作用?
- clang的"-Ofast"选项在实践中有什么作用,特别是对于与gcc的任何差异?
- std::make_unique_for_overwrite() 对 std::make_unique() 有什么作用?
- 运算符 delete[] 有什么作用?
- 下面的代码有什么作用?c++
- 这个陈述'p = I.ptr<uchar>(i);有什么作用?
- 这个嵌套的名称空间定义有什么作用