#include <iostream>
#include <iomanip>
int main()
{
int x=1;
for(int i=0;i<100;++i){
// 下面这段代码会干什么?递增?????????????????????????/
++x;
std::cout<<x<<std::endl;
}
std::cout<<"____??/n_____"<<std::endl;
return 0;
}
Gnu g++文档说:对注释中的三字符组不会发出编译警告,因为他们不会对程序的意义产生影响。上述的例子便说明并非如此。
但书中描述的问题,在GNU g++中貌似已经不存在,。但问题是为什么对后面的那个cout中的"??/"也没有给转译成"\"呢?
MS c++ 8中test倒是看到了书中描述的问题,注意这个这个陷阱“行尾的/”
而且按照c++标准,除了注释中,是不允许出现笑脸符号(:>)的,:>会被转译成],这致使a[i:>等效于a[i],但是貌 似ms vc与gnu g++这两种编译器都不支持对这个他的转移,这倒说不定是件好事,通常我们写成这样的代码都是因为拼写错误。
从上面的分析看是G++默认没有打开对三字组的支持,微软开了对他的支持,但不支持对:>的转译。
本文通过一个简单的C++代码示例探讨了G++和MSVC编译器对于特殊字符和注释的不同处理方式。揭示了在注释中使用特定字符可能导致的意外行为,并分析了两种编译器对这些陷阱的不同反应。
2344

被折叠的 条评论
为什么被折叠?



