我想知道在編譯/預處理期間是否可以將已知字符串轉換爲int。C - 在編譯時將字符串轉換爲int
想象我與字符「AB」字符串,我想在一個工會把它變成一個INT,如:
union StrInt
{
int i;
char c[2];
}
的c[ ] = 'AB'
會讓我擁有價值16961
我想這樣做,但在編譯/預處理期間
我想知道在編譯/預處理期間是否可以將已知字符串轉換爲int。C - 在編譯時將字符串轉換爲int
想象我與字符「AB」字符串,我想在一個工會把它變成一個INT,如:
union StrInt
{
int i;
char c[2];
}
的c[ ] = 'AB'
會讓我擁有價值16961
我想這樣做,但在編譯/預處理期間
是的。 在我的架構下(x86_64-PC-Linux的GNU ),這樣的:
union {
int i;
char c[2];
} u = { .c="AB" };
int main()
{
printf("%d\n", u.i);
}
打印16961就像你期望的那樣。 (不同的實現可能會給你不同的輸出。)
字符數組通常可以用字符串文字初始化。
{ .c= { 'A', 'B' } }
將成爲初創c
成員的另一種方式。
但是這在預處理/編譯期間完成了嗎?還是執行?謝謝;) – user7122079
「AB」被靜態烘焙到二進制圖像中,並且在運行時您只需以int形式訪問。沒有涉及轉換。該值是靜態已知的,但不是整數常量表達式(或現代C++方言中的constexpr)。 (實際上,它不可用,例如,在開關或其他需要整數常量的地方) – PSkocik
多字符常量的定義非常差。不僅長度留給執行,而且還有永久性和編碼。你應該更明確地指出這一點。 – Olaf
你爲什麼要這樣做? –
這對我的應用程序非常有用。 – user7122079
C不是C++不是C.選一個! – Olaf