關於巨集define問題 |
尚未結案
|
cliffpen
一般會員 發表:35 回覆:18 積分:15 註冊:2005-05-16 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
cliffpen 您好: 巨集可用來簡化程序及資料,當您定義了一個巨集並在程式敘述中使用了它,那麼編譯器就會在編譯程式時將巨集展開,以 BCB Help 中的範例為例:
#define HI "Have a nice day!"
當您在程式中使用了如下的敘述時:
ShowMessage(HI);
編譯器會在編譯時,將前一行的敘述展開成為:
ShowMessage("Have a nice day!");
如果您另外定義了一個巨集如下:
#define MYDEF AnsiString test;
而您在程式中設定了如下的敘述:
MYDEF
test = "aa";
ShowMessage(test);
編譯時將會展開如下:
AnsiString test;
test = "aa";
ShowMessage(test);
如果照您的例子來看:
IOMOD=0x03ffff;
在編譯時將會展開成:
*(unsigned int *)0x3ff5000=0x03ffff;
您認為編譯器會有什麼樣的反應呢? 7 天天敲鍵盤 v 時時按滑鼠 8
|
cliffpen
一般會員 發表:35 回覆:18 積分:15 註冊:2005-05-16 發送簡訊給我 |
|
yhchu
一般會員 發表:2 回覆:70 積分:24 註冊:2004-01-28 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
|
cliffpen
一般會員 發表:35 回覆:18 積分:15 註冊:2005-05-16 發送簡訊給我 |
感謝大大的精采解說
可是這個例子是從一本暫存器的書上看來的
書上所有的例子都是這樣定義
大概的程式如下:
#include實際上我找不到 unistd.h 所以我把它mark起來,然後就會編譯錯誤 有沒有可能 include |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
cliffpen 您好: 我使用 BCB4 在編譯時是可以通過的,但是在執行時會產生錯誤,這應該是沒有安裝相關硬體所導致的吧?不過就算您編譯成功了,define 的資料還是不會改變的,就像我前面所寫的,define 的資料會在編譯時被展開,而展開的那個敘述只會設定 I/O Port 的輸出入模式而已,就像您前一篇程式碼中的註解 (p0~p17 output,1:Out 0:in) 一樣,它是設定 I/O Port 暫存器的 out 與 in 模式。 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/08/03 12:27:05
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |