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

看板C_and_CPP作者 ( )時間13年前 (2010/09/11 15:36), 編輯推噓1(103)
留言4則, 4人參與, 最新討論串3/3 (看更多)
pre-process和compile的過程是分開的 在下面的程式裡 pre-processor處理到#ifdef DO_IT這一行的時候DO_IT還沒#define 所以中間的code就被pre-processor刪掉了 pre-processor全部處理完以後才丟給compiler 所以說macro放在前後當然有差啊 ※ 引述《cloudfly (王妃)》之銘言: : 遇到的問題: (題意請描述清楚) : 遇到了一個巨集的考題,不曉得怎麼解釋跑出的結果 : 希望得到的正確結果: : 在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; : } : 補充說明: -- 好面熟的題目 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.170.32.62

09/11 17:02, , 1F
是阿..某hxx的題目
09/11 17:02, 1F

09/12 00:10, , 2F
這是.....某xTx的題目嗎?要考什麼呀...?
09/12 00:10, 2F

09/12 11:06, , 3F
這好像是HTX 的考題耶 哈哈
09/12 11:06, 3F

09/16 09:18, , 4F
...上禮拜才去面試完全不會 現在才知道這其實很簡單!
09/16 09:18, 4F
文章代碼(AID): #1CYp6MyX (C_and_CPP)
文章代碼(AID): #1CYp6MyX (C_and_CPP)