源代码如下:
#define PTR_FREE(ptr)\
{\
if ((NULL) != (ptr))\
{\
free(ptr);\
ptr = NULL;\
}\
}
反斜杠是续行符,只能放在一行的末尾
每一行的反斜杠表示紧接着下一行,不间断
为什么要不间断呢?
因为:这是一个宏的定义,语法上只能占用一行,由于定义结构太长,分行书写,需要用"\"来指明分行书写宏定义
下面粘贴网友给出的解释:从解释中可以看出,续行符的使用是针对特殊情况的,即一行没有完成的C指令,需要多行写的时候就需要使用这个续行符。
一般常见的,反斜杠符号在C++中是当做转义符号。但是当#DEFINE遇到反斜杠符号
这玩意儿有个正式的名称叫做续行符,在普通代码行后面加不加都一样(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的预处理器在编译之前会自动将\与换行回车去掉,这样一来既不影响阅读,又不影响逻辑,皆大欢喜.
看完这个,在VS2012中,对我的程序进行一个改写,去掉反斜杠,在一行中将代码写完,如下:
#define PTR_FREE(ptr){if ((NULL) != (ptr)){free(ptr);ptr = NULL;}}
程序运行正常,和加反斜杠续行效果一样,但是写在一行明显不便于读取,并不是所有的C++编译器都能支持写很长一行的程序,所以,必要时可以选择使用续行符