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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了头文件你不得不知的那些事儿相关的知识,希望对你有一定的参考价值。

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


以上是关于头文件你不得不知的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章

秀的一批,那些你不得不知的 Python 杀手级框架

秀的一批,那些你不得不知的 Python 杀手级框架

TCP那些事儿(下)

TCP 的那些事儿(下)

TCP 的那些事儿(下)

TCP 的那些事儿(下)