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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2985|回復: 11
打印 上一主題 下一主題
收起左側

請教 關于C語言宏定義的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:47286 發表于 2020-1-11 14:46 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
比如 在keil中 我定義這樣一個宏
#define a  1+2


調用時
x=a;

問題

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

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

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

有點糊涂了 應該是哪個
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

12#
ID:462827 發表于 2020-1-12 11:31 | 只看該作者
宏定義在預編譯階段只是查找替換
回復

使用道具 舉報

11#
ID:685212 發表于 2020-1-12 01:23 | 只看該作者
我覺得應該是x=1+2
回復

使用道具 舉報

10#
ID:47286 發表于 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;

說明編譯時已經運算過了

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

使用道具 舉報

9#
ID:47286 發表于 2020-1-11 21:29 | 只看該作者
zhai1995 發表于 2020-1-11 19:58
你可以自己 驗證的 ,  #define a  1+4       然后  x = a/4;     打印看結果多少   就知道是先加等于5    ...

歐了 你這個方法好 我試試
回復

使用道具 舉報

8#
ID:473159 發表于 2020-1-11 19:58 | 只看該作者
你這是偷懶!這樣的疑問完全是自己可以在C編程器中去驗證的事!
回復

使用道具 舉報

7#
ID:267932 發表于 2020-1-11 19:58 | 只看該作者
你可以自己 驗證的 ,  #define a  1+4       然后  x = a/4;     打印看結果多少   就知道是先加等于5   還是原樣替換了。
回復

使用道具 舉報

6#
ID:267932 發表于 2020-1-11 19:46 | 只看該作者
原樣替換  ,你理解應該是對的
回復

使用道具 舉報

5#
ID:275826 發表于 2020-1-11 18:18 | 只看該作者
就是x=3
回復

使用道具 舉報

地板
ID:685071 發表于 2020-1-11 17:27 | 只看該作者
宏定義就是把定義的宏在程序運行時直接替換  在程序編譯的時候a被替換成1+2  所以就變成x=1+2
回復

使用道具 舉報

板凳
ID:685069 發表于 2020-1-11 17:16 | 只看該作者
我覺得是第二個,宏定義本身是對程序中特殊命令的預處理,經過預處理后程序就不再包括預處理命令了,最后再由編譯程序時——預處理——源程序進行編譯處理,得到可供執行的目標代碼。所以是x直接是3,a還是1+2,但是在預處理中完成的。
回復

使用道具 舉報

沙發
ID:685006 發表于 2020-1-11 15:11 | 只看該作者
編譯時就已經運算完了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表