我在MCU頭文件測試結構具有成員名稱
typedef struct tagANSBBITS {
unsigned ANSB0:1;
unsigned ANSB1:1;
unsigned ANSB2:1;
unsigned ANSB3:1;
unsigned ANSB4:1;
unsigned :7;
unsigned ANSB12:1;
unsigned ANSB13:1;
unsigned ANSB14:1;
unsigned ANSB15:1;
} ANSBBITS;
限定的結構只有某些位定義,因爲它們是在HW實現。 問題是我自己做一個宏這樣
#define pinMode(pin) pin(_ANS_F)
#define _ANS_F(alpha,bit) (ANS ## alpha ## bits.ANS ## alpha ## bit)
而且這樣
pinMode(RED_LED) = 0;
相應ANSBx沒有在結構上定義的時候,這顯然無法使用。在使用宏之前,我可以以某種方式測試ANSx的存在嗎?或說服gcc這沒關係?
由於提前,
你想達到什麼目的?對不起,我現在迷了路。你爲什麼要做這些宏?你能解釋一下嗎? – lpapp
宏在編譯器知道你的結構存在之前就發生了。此外,你的第二個宏是[保留標識符](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-a-c- identifier)。 – chris
編譯器供應商提供的表頭是否以這種形式提供?嘗試將C位字段映射到硬件寄存器通常不是一個好主意,因爲您無法控制生成的代碼的順序或讀取 - 修改 - 寫入行爲。 – sh1