今天用GCC编译遇到如下警告(使用了-Wall选项):warning: multi-line comment [-Wcomment]
导致警告的代码是一个函数声明上面的注释,如下:
// this arg is a driver, for example c:\
// and you can ...
查了下原来在注释行的末尾加上反斜杠会导致编译器连接本行和下行(和宏定义类似)。这里由于两行都是注释,所以不会有什么问题。
但是考虑如下例子:
#include <iostream>
#include <string>
#define VER_NUM "10"
std::string get_version_str()
{
std::string ver("ver=");
#ifdef DEBUG
ver += (std::string(VER_NUM) + "&debug=true");
#else // release version string...\
ver += std::string(VER_NUM);
#endif
return ver;
}
int main()
{
std::cout<<get_version_str()<<std::endl;
return 0;
}
这个例子中,非DEBUG模式下永远取不到正确的version string。可以看第12行,csdn的语法分析器并没有识别出该行实际上已经是注释了。