gra*_*asm 0 c++ gcc visual-c++
我一直在阅读ISO 14882:2003.它说:
S-CHAR:
源字符集除了双引号",反斜线\,或换行字符的任何成员 转义序列
通用字符名称
现在,关于换行符,当行结尾为'\ r'时,我看到一个问题,
我写了一个小cpp程序:
#include <fstream>
#include <string>
int main()
{
const char* program=""
"#include <string>\n"
"int main()\n"
"{\n"
" std::string s;\n"
" //s=\"\r"
" //\r"
" //\r"
" //\r"
" //\";\n"
" s=\"\\xAE\\xfffactory\\xAE\\xffaction\";\n"
" return 0;\n"
"}\n"
;
std::ofstream file("file.cpp", std::ios_base::trunc);
file << program;
file.close();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Windows上,file.cpp(在VS编辑器中读取)是:
#include <string>
int main()
{
std::string s;
//s="
//
//
//
//";
s="\xAE\xfffactory\xAE\xffaction";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译file.cpp时,VS触发并在第6行中出错,而不是第10行.
在Linux上,file.cpp(如emacs中所读)是:
#include <string>
int main()
{
std::string s;
//s="^M //^M //^M //^M //";
s="\xAE\xfffactory\xAE\xffaction";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用gcc编译file.cpp我在第10行得到一个错误,而不是在第6行.
我应该从中得出什么结论?
你应该得出结论:
\r行结尾,因此它实际上将该";行计为第6行.emacs不理解\r行结尾(至少默认情况下),因此它会在一行中显示源代码.啊,你从标准中提供的报价也是无关的.在新线有指源代码字符集,而不是\r和\n字符串中.您引用的语法规则只排除字符串文字,例如:
const char* s = "some text, here comes 'new-line'
ha ha ";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2582 次 |
| 最近记录: |