作者cloudfly (王妃)
看板C_and_CPP
標題[問題] 關於macro在程式碼中的位置
時間Sat Sep 11 15:11:00 2010
遇到的問題: (題意請描述清楚)
遇到了一個巨集的考題,不曉得怎麼解釋跑出的結果
希望得到的正確結果:
在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
推 tomap41017:推樓上 09/11 23:40