的unsigned int類型在頭我的控制之外,還有這個:如何字面的浮動轉換爲相同的位模式
typedef union {
char * v_charp;
int v_int;
float v_float;
} value_t;
typedef struct var {
char *name;
value_t value;
} variable;
#define VARIABLE_DEF(Name, Value) {Name, {(char*)Value}}
他們預計,在我的代碼,我會做這樣的事情:
variable my_variables[2] = {
VARIABLE_DEF("Variable 1", 1),
VARIABLE_DEF("Variable 2", 2)
};
誰寫這顯然沒有考慮,你可能想用一個浮點文字初始化工會。所以我需要弄清楚如何將文字浮點數轉換爲相同位模式的整數。如果我可以使用中間變量,那麼它很容易:
float tmp;
variable my_variables[2] = {
VARIABLE_DEF("Variable 1", tmp = 1.1f, *((unsigned int *)(&tmp))),
VARIABLE_DEF("Variable 2", tmp = 2.2f, *((unsigned int *)(&tmp)))
};
但是你不能在結構初始化程序中使用變量。我還可以做些什麼?
我看到了這個的第一部分,並且認爲'很棒,當然就是這樣!不過,編譯器還有其他想法。實際情況更復雜 - 仍然有一個枚舉,結構和宏定義如圖所示,但每個枚舉的成員更多。這個宏真的是增值。 – Tom 2012-01-30 10:34:28
編譯器的問題是指定的聯合初始化程序是C99中引入的擴展程序,GCC不支持C++代碼。看來我錯誤地標記了這個問題C,當它應該是C++的 - 我沒有意識到它造成了這種差異。 – Tom 2012-01-30 10:46:30
此答案中的第一個片段將調用未定義的行爲。我不會建議使用它。 – jpalecek 2012-01-30 11:03:23