2016-11-27 76 views
1

我想知道在編譯/預處理期間是否可以將已知字符串轉換爲int。C - 在編譯時將字符串轉換爲int

想象我與字符「AB」字符串,我想在一個工會把它變成一個INT,如:

union StrInt 
{ 
    int i; 
    char c[2]; 
} 

c[ ] = 'AB'會讓我擁有價值16961

我想這樣做,但在編譯/預處理期間

+2

你爲什麼要這樣做? –

+0

這對我的應用程序非常有用。 – user7122079

+3

C不是C++不是C.選一個! – Olaf

回答

1

是的。 在我的架構下(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成員的另一種方式。

+0

但是這在預處理/編譯期間完成了嗎?還是執行?謝謝;) – user7122079

+0

「AB」被靜態烘焙到二進制圖像中,並且在運行時您只需以int形式訪問。沒有涉及轉換。該值是靜態已知的,但不是整數常量表達式(或現代C++方言中的constexpr)。 (實際上,它不可用,例如,在開關或其他需要整數常量的地方) – PSkocik

+0

多字符常量的定義非常差。不僅長度留給執行,而且還有永久性和編碼。你應該更明確地指出這一點。 – Olaf