crny
新手想问一些关于头文件里的问题!
经常在头文件里看到一些预定义的指令,有些地方不是很明白,比如:
#ifndef __BOOTP_SERVER_H__
#define __BOOTP_SERVER_H__
这里面的_到底是什么? 如果只是为了分隔,为什么头尾还要加上这个下划线呢?
是不是有什么约定?
谢谢解答!
zhoubingfeng
[quote]原帖由 [i]crny[/i] 于 2008-2-18 18:12 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=7974670&ptid=1054046][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
#ifndef __BOOTP_SERVER_H__
#define __BOOTP_SERVER_H__
[/quote]
保护头文件!
simohayha
只是为了防止重复包含头文件,而加下划线这些就是习惯而已.
白天晒太阳
那几个是头文件中的保留标识符
1 每个头文件声明或定义了在其相关的子条款中列出的所有标识符,同时有选择地声明或定义了在其相关的将来库方向子条款中列出的所有标识符,以及那些要么是为其他任何用处要么是为文件范围内标识符而一直保留的标识符。
——所有以下划线和紧接着一个大写字母或另一个下划线开始的标识符总是保留。
——所有以下划线开始的标识符总是保留,用于普通和标签名字空间的文件作用域标识符。
——在任何以下子条款(包括将来库方向)中的每一宏名字保留用来指定其相关的任何头文件是否被包含;除非另外明确规定
——所有在以下的任何一个子条款(包括将来库方向)中有外部链接的标识符总是保留,用于作为外部链接的标识符。
【注 外部链接的保留标识符包括 error,setjmp 和va_end。】
——在以下列出的任何子条款(包括将来库方向)中列出的每一个文件作用域标识符保留,用于宏名字,同时也用于在同一名字空间中的文件作用域标识符,如果其相应的任何头文件被包含的话。
2 其它的标识符不被保留。 如果程序声明或定义一个在某个上下文中被保留的标识符(不同于随后的7.1.4),或者定义一个保留标识符为一个宏名字, 其行为不定义。
3 如果一个程序删除(通过 #undef)了以上所列的标识符的任何宏定义, 其行为不定义。
更详细的请参阅C Standard - ANSI ISO IEC 9899 - 1999第7章节中的内容
[[i] 本帖最后由 白天晒太阳 于 2008-2-18 20:13 编辑 [/i]]
cugb_cat
要是怕别人也使用这个宏,就在这个宏名前面使劲加下划线:em06: :em06:
emacsnw
其实最好把这些宏前面的下划线去掉,比较符合标准。
abcbuzhiming
搭车问个关于头文件的问题:头文件这种东西的设计思想是什么,为什么我总觉得头文件里的那堆东西很难看懂呢,甚至有些部分更像汇编……