2015-10-23 注释符、接续符'\'和转移符'\'

1  编译时对注释处理的规则:

1.1 编译器会在编译过程中删除注释,但不是简单的删除,而是用空格代替。

1.2 编译器认为用双引号括起来的内容都是字符串,双斜杠也不例外。

1.3 /*...*/型注释是不能被嵌套的。

 

2  接续符'\':指示编译器行为的利器。

2.1 编译器会将反斜杠剔除,跟在反斜杠后面的字符自动接到前一行。

2.2 在接续单词时,反斜杠之后不能有空格,反斜杠的下一行之前也不能有空格。

2.3 接续符适合在定义宏代码块的时候使用。

eg:

#include <stdio.h>

#define SWAP(a,b) \
{                 \
 int m;           \
 m = a;           \
 a = b;           \
 b = m;           \
}                 \

void main()
{
 int a = 9;
 int b =18;
 SWAP(a,b);
 printf("%d   %d\n", a ,b);
 getchar();
}

 以上代码中就使用了接续符定义了一个宏代码块。读者不妨思考一个问题:该宏代码块和以下代码有什么区别?

void swap(int a,int b)
{
 int m;
 m = a;
  a = b;
  b = m;
}

 也就是用函数和用宏代码块有什么区别?用函数能实现我们想要的功能吗?

ANS:

以下为个人的理解:

抓住一点:#define是单纯的进行文本的替换,也就是说,编译器在编译的时候,会把我们main函数里面代码SWAP(a,b)纯与上述定义的宏进行纯文本替换。如下:

void main()

{

int a =9;

int b =18;

{                 

 int m;           
 m = a;           
 a = b;           
 b = m;          
}

 printf("%d   %d\n", a ,b);
 getchar();

}

很显然上述代码能够实现我们想要的结果。那么用我们之前提到的那个函数能够实现我们想要的功能吗?答案是不能!

这里简单提一下,因为上述提到的函数的参数传递方式是值传递方式,并没有对变量进行改变。具体讲解请参看我之前写的文章“2015.8.5关于指针的个人理解”。

 

3 转义符 '\'

同样也是和持续符一样的反斜杠,但是转义符却有不同的含义。

转义符主要用于在字符串中表示“无回显字符”,也可以表示常规字符。

无回显字符:类似有换行\n,制表符\t,回车\r……的特殊字符。

posted @ 2015-10-23 17:08  玩呀熊熊  阅读(801)  评论(0编辑  收藏  举报