亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: 請教 關于C語言宏定義的問題 [打印本頁]

作者: dzbj    時間: 2020-1-11 14:46
標題: 請教 關于C語言宏定義的問題
比如 在keil中 我定義這樣一個宏
#define a  1+2


調用時
x=a;

問題

運算過程是 x=3 還是 x=1+2

我理解應該是x=1+2 就是說每次調用a都會進行一次1+2的運算

但這兩天看書說 define在編譯時就運算完了 要是按書里的說法理解 每次調用a 應該直接就是3而不進行1+2運算

有點糊涂了 應該是哪個

作者: 1402354830    時間: 2020-1-11 15:11
編譯時就已經運算完了。
作者: qiuaqiuqiu    時間: 2020-1-11 17:16
我覺得是第二個,宏定義本身是對程序中特殊命令的預處理,經過預處理后程序就不再包括預處理命令了,最后再由編譯程序時——預處理——源程序進行編譯處理,得到可供執行的目標代碼。所以是x直接是3,a還是1+2,但是在預處理中完成的。
作者: z77889900111    時間: 2020-1-11 17:27
宏定義就是把定義的宏在程序運行時直接替換  在程序編譯的時候a被替換成1+2  所以就變成x=1+2
作者: tyrl800    時間: 2020-1-11 18:18
就是x=3
作者: zhai1995    時間: 2020-1-11 19:46
原樣替換  ,你理解應該是對的

作者: zhai1995    時間: 2020-1-11 19:58
你可以自己 驗證的 ,  #define a  1+4       然后  x = a/4;     打印看結果多少   就知道是先加等于5   還是原樣替換了。
作者: yoxi    時間: 2020-1-11 19:58
你這是偷懶!這樣的疑問完全是自己可以在C編程器中去驗證的事!
作者: dzbj    時間: 2020-1-11 21:29
zhai1995 發表于 2020-1-11 19:58
你可以自己 驗證的 ,  #define a  1+4       然后  x = a/4;     打印看結果多少   就知道是先加等于5    ...

歐了 你這個方法好 我試試
作者: dzbj    時間: 2020-1-11 22:09
感謝樓上各位前輩的回復 特別感謝7樓的回復 根據你的建議我驗證了一下 情況如下

第一種

#define a 4+4

uchar x;

x=a/4;

結果 x=5

說明是直接替換

第二種
#define a 4+4
uchar b=a;
uchar x=0;

x=b/4;
x=2;

說明編譯時已經運算過了

我這么表達可能不太準確 就是說直接調用宏定義的東西 就是直接替換 寫什么進去就直接替換成什么 但如果把宏聲明給一個變量 在編譯時會直接把宏的值運算出來給變量

作者: 工具人2000    時間: 2020-1-12 01:23
我覺得應該是x=1+2
作者: hantu    時間: 2020-1-12 11:31
宏定義在預編譯階段只是查找替換




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1