2017-10-14 148 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代码中还是来自头中的宏,这没有什么区别。