码迷,mamicode.com
首页 > 其他好文 > 详细

头文件你不得不知的那些事儿

时间:2016-03-10 23:29:25      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

1:我们常常会看到诸如此类的头文件的书写方式:

#ifdef MY_HEAD_H__
#define MY_HEAD_H__
#endif
这个是为了防止文件的重复定义,预处理器回来处理这些头文件,当他第一次处理这个头文件的时候,发现MY_HEAD_H__还没有被定义,这样的话就会编译该条件下的宏的内容。若该文件被引用多次,那么预处理器就会发现MY_HEAD_H__已经被定义了,所以可以跳过该条件下的内容。特别是重名的时候,可以有效地防止"symbol already defined"的编译错误,通常,我们将头文件的大写用作同名,避免与项目中其他头文件重名。
 
2:有关__attribute__机制:参考http://www.cnblogs.com/astwish/p/3460618.html,到用时再查
我目前只是见过如下用法,是用来消除gcc -Wall选项中对于没有返回值的非空类型的函数的warning
#ifdef __GNUC__
 
/* This macro stops ‘gcc -Wall‘ complaining that "control reaches
end of non-void function" if we use the following functions to
terminate main() or some other non-void function. */
 
#define NORETURN __attribute__ ((__noreturn__))
#else
#define NORETURN
#endif

 

3:用于连接字符串,或者是将数字或字符串加上引号或者单引号
/*完成两个x和y的拼接*/
#define Conn(x,y) x##y
/*跟x加上单引号变字符,x长度不能超过四,可能是因为单字符转译时最多为4位*/
#define ToChar(x) #@x
/*给x加上双引号,变成字符串*/
#define ToString(x) #x
/*定义宏函数,换行时需要用\进行拼接*/
#define functionA(args){ //函数体 \
}

 

 
4:利用宏来进行调试(只讨论日志的使用)
预定义宏有__FILE__, __LINE__,__DATE__,__TIME__,由单词就可以知道他们所代表的字符串的含义,已亲测
 
------------------------------------先写到这里,以后有用法再更新---星期四, 2016年3月10日-----------------------------------

http://blog.chinaunix.net/uid-22566367-id-381995.html

http://www.cnblogs.com/gaojian/p/3167451.html

http://blog.csdn.net/zhangxinrun/article/details/5808788

http://www.cnblogs.com/flywuya/archive/2010/12/04/1896121.html


头文件你不得不知的那些事儿

标签:

原文地址:http://www.cnblogs.com/gtooo1/p/5263924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!