由于最近好几次碰到反斜杠,不明白是什么意思,后来查了下,原来用的较多的是作为强制换行符,衔接上下两行的意思。有时候一个语句太长,一行写不下,或者显得不美观,为了便于阅读,可以将较长的语句拆分成两行甚至多行,除了最后一行之外,在每一个分行后面加一个反斜杠“\”,这样编译的时候,系统会自动将这几个分行读成一个语句处理。比如:
1) 用在宏定义中:
#define CV_ARE_SIZES_EQ(mat1, mat2) \
((mat1)->rows == (mat2)->rows && (mat1)->cols == (mat2)->cols)
2) 用在printf中,有时候printf中语句太长,需要切分,则需用到反斜杠;
3) 用“//”只能注释当前行的语句,想要将下一行一起注释掉,则可以在该行最后加上反斜杠。
另外,反斜杠除了强制换行的作用之外,还有转义符的意思。如:“\n”表示换行符,"\t" "\b"等,此时反斜杠表示转义,执行反斜杠后面的符号表示的意思。
但若要取反斜杠的本意,则需要在反斜杠之前再加一个反斜杠才能正确表示。比如我要在程序中读取F:\OpenCV2.0\vs2008\videos\videos1.avi ,,我不能直接将这样表示,而应该在每一个反斜杠前面再加一个反斜杠,表示为:F:\\OpenCV2.0\\vs2008\\videos\\videos1.avi ,这样才能正确读取你要的文件。
总结一下,目前个人了解的反斜杠的作用是两种:
1 是作为转义字符,将进行的操作是紧跟其后的字符的操作。
2 与回车键组合进行强制换行。在要强制换行的地方输入反斜杠然后回车,系统编译的时候会自动将反斜杠下面的一行与前面的一行解释成一个语句。
另:在命令行中使用反斜杠见:http://msdn.microsoft.com/en-us/library/aa243471.aspx
- 今天看了一下vc自带的一些头文件的内容,看到很多语句后面都有反斜杠,在印象中就只有//是表示注释功能的,但是反斜杠也只是一个转义字符来的。但是语句后面再加一个反斜杠,还真没见过!查了一下,原来是这样的:
①转义字符;如:\n表示回车+换行等。
②续行符;这个需要注意一下,在一般的语句中,这个有和没有事没关系的,编译器编译的时候会自动把两句连在一起(注意是把第二行原原本本从开始第一个字符(包括空格)连接到前一行上面);看下面例子:
- int i = 1;
- cout<<i++
- <<i++<<i++<<endl;
这个是没错的。
但是:
- int i = 1;
- cout<
- <i++<<i++<<i++<<endl;
这个会发生错误。
然后这个:
- int i = 1;
- cout<\
- <i++<<i++<<i++<<endl;
但是这个也是有问题的。
然后这个:
- int i = 1;
- cout<\
- <i++<<i++<<i++<<endl;
这个是没有问题的!
到这里,明白了吧!
,
另外还有一个需要注意的地方,上面的续行符是用在某个语句比较长的时候,用来续行的,这样会好看点。还有一作用就是——系统规定,宏定义的时候,代替的语句很长或者是个语句块甚至函数的时候,就需要用到这个反斜杠了!看下面:
参考百度知道
这玩意儿有个正式的名称叫做续行符,在普通代码行后面加不加都一样(VC是自动判断续行的),但是在宏定义里面就特别有用,因为宏定义规定必须用一行完成: #define SomeFun(x, a, b) if(x)x=a+b;else x=a-b; 这一行定义是没有问题的,但是这样代码很不容易被理解,以后维护起来麻烦,如果写成: #define SomeFun(x, a, b) if (x) x = a + b; else x = a - b; 这样理解是好理解了,但是编译器会出错,因为它会认为#define SomeFun(x, a, b)是完整的一行,if (x)以及后面的语句与#define SomeFun(x, a, b)没有关系.这时候我们就必须使用这样的写法: #define SomeFun(x, a, b)\ if (x)\ x = a + b;\ else\ x = a - b; 注意:最后一行不要加续行符啊.VC的预处理器在编译之前会自动将\与换行回车去掉,这样一来既不影响阅读,又不影响逻辑,皆大欢喜