看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) 遇到了一個巨集的考題,不曉得怎麼解釋跑出的結果 希望得到的正確結果: 在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
LPH66:單純就是看 #ifdef 那裡時 DO_IT 定義了沒這樣而已 09/11 15:17
LPH66:要記得 macro 置換和 compile 是兩個不同的階段 09/11 15:18
cloudfly:可是MACRO不是編譯時就已經定義了嗎? 09/11 15:18
LPH66:你把它們混在一起了 09/11 15:18
cloudfly:所以若#define DO_IT是沒抓到是因為在執行時期..程式跑 09/11 15:20
cloudfly:到PrintSum裡面的#ifdef DO_IT時發現DO_IT尚未定義 09/11 15:21
cloudfly:所以就印出0,若把DEFINE往上移,執行時就找的到?? 09/11 15:22
cloudfly:這樣解釋合理嗎?? 09/11 15:22
loveme00835:編譯器看到的程式碼不一樣 09/11 15:23
loveme00835:http://paste.plurk.com/show/304128/ 09/11 15:33
tomap41017:推樓上 09/11 23:40