宏定义
除了定义宏常数之外,经常还用来定义字符串,尤其是路径:
A),#define ENG_PATH_1 E:\English\listen_to_this\listen_to_this_3
B),#define ENG_PATH_2 “E:\English\listen_to_this\listen_to_this_3 ”
噢,到底哪一个正确呢?如果路径太长,一行写下来比较别扭怎么办?用反斜杠接续
符啊:
C), #define ENG_PATH_3 E:\English\listen_to_this\listen\
_to_this_3
还没发现问题?这里用了4 个反斜杠,到底哪个是接续符?回去看看接续符反斜杠。
反斜杠作为接续符时,在本行其后面不能再有任何字符,空格都不行。所以,只有最后一
个反斜杠才是接续符。至于A)和B) ,那要看你怎么用了,既然define 宏只是简单的替换,
那给ENG_PATH_1 加上双引号不就成了:“ENG_PATH_1 ”。
但是请注意:有的系统里规定路径的要用双反斜杠“\\ ”, 比如:
#define ENG_PATH_4 E:\\English\\listen_to_this\\listen_to_this_3
用define宏定义注释符号?
上面对define 的使用都很简单,再看看下面的例子:
#define BSC //
#define BMC /*
#define EMC */
用define宏定义表达式
这些都好理解,下面来点有“技术含量”的:
定义一年有多少秒:
#define SEC_A_YEAR 60*60*24*365
这个定义没错吧?很遗憾,很有可能错了,至少不可靠。你有没有考虑在16 位系统下
把这样一个数赋给整型变量的时候可能会发生溢出?一年有多少秒也不可能是负数吧。修
改一下:
#define SEC_A_YEAR (60*60*24*365 )UL
又出现一个问题,这里的括号到底需不需要呢?继续看一个例子:
定义一个宏函数,求x 的平方:
D),BSC my single-line comment
E),BMC my multi-line comment EMC
D)和E)都错误,为什么呢?因为注释先于预处理指令被处理,当这两行被展开成//…或
/*…*/时,注释已处理完毕,此时再出现//…或/*…*/ 自然错误.因此,试图用宏开始或结束一段
注释是不行的。