[問題] 關於macro在程式碼中的位置

看板C_and_CPP作者 (王妃)時間15年前 (2010/09/11 07:11), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/3 (看更多)
遇到的問題: (題意請描述清楚) 遇到了一個巨集的考題,不曉得怎麼解釋跑出的結果 希望得到的正確結果: 在main()中執行test1和tes2兩個function,求印出sum的值為多少? 程式跑出來的錯誤結果: 若依照這樣的程式(巨集放在PrintSum後)執行結果就是印出0,0 但如果把#define DO_IT放到PrintSum之前,執行結果就是3,7 請問macro前置處理器放在前後會有這種差別呢? 這種結果要怎麼解釋。 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) #include <stdio.h> #include <stdlib.h> void PrintSum(int x, int y) { int sum =0; #ifdef DO_IT sum=x+y; #endif printf("%d\n",sum); } #define DO_IT void test1() { PrintSum(1,2); } void test2() { PrintSum(3,4); } int main(void) { test1(); test2(); system("pause"); return 0; } 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.69.230.125

09/11 15:17, , 1F
單純就是看 #ifdef 那裡時 DO_IT 定義了沒這樣而已
09/11 15:17, 1F

09/11 15:18, , 2F
要記得 macro 置換和 compile 是兩個不同的階段
09/11 15:18, 2F

09/11 15:18, , 3F
可是MACRO不是編譯時就已經定義了嗎?
09/11 15:18, 3F

09/11 15:18, , 4F
你把它們混在一起了
09/11 15:18, 4F

09/11 15:20, , 5F
所以若#define DO_IT是沒抓到是因為在執行時期..程式跑
09/11 15:20, 5F

09/11 15:21, , 6F
到PrintSum裡面的#ifdef DO_IT時發現DO_IT尚未定義
09/11 15:21, 6F

09/11 15:22, , 7F
所以就印出0,若把DEFINE往上移,執行時就找的到??
09/11 15:22, 7F

09/11 15:22, , 8F
這樣解釋合理嗎??
09/11 15:22, 8F

09/11 15:23, , 9F
編譯器看到的程式碼不一樣
09/11 15:23, 9F

09/11 15:33, , 10F

09/11 23:40, , 11F
推樓上
09/11 23:40, 11F
文章代碼(AID): #1CYok6g0 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CYok6g0 (C_and_CPP)