影音先锋男人资源av站_狠狠色综合激情丁香五月_爱爱爱爱看视频_在线播放免费人成视频在线观看_少妇人妻综合久久中文字幕_国产午夜无码精品免费看_久久久久久夜精品精品免费啦_男人女人午夜视频免费_日本xxxx裸体xxxx_丰满人妻熟妇乱又仑精品
電子科大論壇-非清水河畔
標(biāo)題:
不帶參數(shù)的宏在使用過程中的注意事項!
[打印本頁]
作者:
小鳳尾
時間:
2006-10-28 10:05
標(biāo)題:
不帶參數(shù)的宏在使用過程中的注意事項!
宏的定義形式為: #define 宏名 宏體
要注意以下幾點:
1、書寫時,#define與宏名之間、宏名與宏體之間均以(一個或多個)空格隔開,也即從宏名后的第一個非空格字符開始,直到本行結(jié)束之間的符號均作為宏體看待,看下面的例子:
若宏替換命令行后面加了分號,則該分號將成為宏體的一部分。
如:#define N 8;
則宏體應(yīng)該是8;(分號也包括在內(nèi)!)
這時,如果遇到語句
for(i=0;i<N-1;i++){...}
則宏替換后的形式為:
for(i=0;i<8;-1;i++){...}
該程序在編譯時將無法通過,問題也很難查出來。
切記:定義宏的時候,宏體后面千萬不要加分號,除非你本來就需要在宏體中加入這個分號!
2、宏替換過程
在進(jìn)行宏替換時,要注意將宏名按定義時宏體的形式原封不動地代入表達(dá)式中,不要增加任何其他的符號(尤其是小括號!),看下面的例子:
有如下程序
#define N 2
#define M N+1
#define NUM 2*M+1
main()
{
int i;
for(i=1;i<=NUM;i++) printf("%d\n",i);
}
則該程序中for循環(huán)執(zhí)行的次數(shù)是
A)5 B)6 C)7 D)8
為獲得宏名NUM的替換結(jié)果,先將宏名M的宏體N+1替換進(jìn)去,得到NUM的形式為:2*N+1+1,注意不能給M的宏體N+1隨意加小括號,寫成2*(N+1)+1,這是最容易犯的錯誤!!然后將N的宏體替換進(jìn)去,最后得到NUM的形式為2*2+1+1,該表達(dá)式的值為6,因此上述題目的正確答案為(B)。這是2000年9月二級C中的一道選擇題。
切記:在進(jìn)行宏替換時,不要隨意給宏體加上小括號,除非宏定義中本身就有小括號!
3、宏體不被替換的情況
(1) 雙引號中的與宏名相同的字符串將不被替換;
(2) 用戶標(biāo)識符中只有一部分與宏名相同的字符串將不被替換。
如有宏定義 #define PI 3.1415926
則:語句 printf("PI is 3.14");和 int myPI;中的"PI"均不被作為宏名而替換。
歡迎光臨 電子科大論壇-非清水河畔 (http://www.hallmarkedu.com/)
Powered by Discuz! X3.4