我想從通過變量遞交的常量值初始化結構中的字段。從變量初始化結構中的字段
typedef struct _A{
uint a;
}A;
const A a = {9} ; const A b = { .a = 10 }; const A c = {0};
typedef struct _Z{
A a;
A b;
A c;
}Z;
Z z = { a,b,c };
但這產生了編譯器錯誤:initializer element is not constant
因爲A,B和C被聲明爲const的不應該是在運行時修改了什麼不是很明顯。
什麼,我想在內存中,得到的是這樣的:
0x00 9
0x04 10
0x08 0
因爲結構僅僅是一個整數數組。
現在的問題是如何可以告訴編譯器(使用臂-NONE-EABI-GCC),該變量a
,b
和c
用於像定義並可以/應當通過它們的內容,因爲只有一個參考來代替到z
將出現在正在運行的程序中?
也許一些編譯指示或甚至預處理指令?
我正在構建A
在我初始化的同一個宏a
。看起來像這樣,但更復雜一些。
#define bar(name, ...)\
typedef struct __bar_##name{\
List(applydef, __VA_ARGS__)\
}bar_##name;\
const bar_##name name ={List(applyset, __VA_ARGS__)};
bar(foobar, a,b)
上述代碼是自我膨脹由於過度使用的定義。 我會在這裏接受的另一個解決方案是不生成新的結構,而是一個新的定義,我可以像這樣扔進宏。
它是C還是C++?這不一樣。 –
請選擇一種語言。 '{.a = 10}'不是標準的C++。 –
這是不可能在c + +? – Zirafinu