2017-10-14 146 views
0

的fcntl-linux.h顯示O_APPEND的十六進制值是什麼?

#ifndef O_APPEND 
# define O_APPEND  02000 
#endif 

//樣品C代碼

int APPEND_MASK = O_APPEND; 

GDB SNIPPIT

(gdb) print /x APPEND_MASK 
$11 = 0x400 

我確定該頭文件以八進制經由存儲的位標誌手動轉換,但我怎麼知道,否則?例如,在頭文件中它說八進制是數字系統..?

+3

用'0'開始一個整數字面意味着八進制。 – Barmar

+0

它不在頭文件中。這是語言標準的一部分。以零開頭的數字不是後跟一個'x'是八進制數。帶有'0x'的數字是十六進制。 –

+0

學到了新東西..謝謝.. –

回答

2

頭文件只是定義了一個宏,它是簡單的字符串替換。因此,宏觀的結果是

int APPEND_MASK = O_APPEND; 

被替換

int APPEND_MASK = 02000; 

在C中,當一個整型常量與0開始,它解釋爲八進制(就像0x前綴是指其解釋如十六進制)。常量是直接寫入C代碼中還是來自頭中的宏,這沒有什麼區別。