欢迎来到天天文库
浏览记录
ID:20144109
大小:37.50 KB
页数:11页
时间:2018-10-10
《宏的使用方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在这里总结宏的使用方法欢迎补充1条件include如下CODE#ifndefMAIN_H_#defineMAIN_H_其它内容#endif上面在看到头文件时会看到作用就是阻止这个头文件被多次include多次include就会出现重复的定义情况所以需要在每个头文件中都使用这个定义如果还不是很了解要怎样使用可以看看c的标准头文件如fcntl.h2条件编译如下CODE#ifdef_DEBUGprintf("thisdebuginfo");#endif如果没有定义_DEBUG宏的话那么上面那一行是不会编译进去的但是定义了_DEBUG后上面那行就会
2、编译进去可以写个简单的程序测试CODE#includeintmain(){#ifdef_DEBUGprintf("helloworld");#elseprintf("nodebug");#endifreturn0;}第一次使用gcc-D_DEBUGmain.c第二次使用gccmain.c运行两次的结果看3定义为某个值以便后面修改这个值时不用修改其它地方代码只要修改这个宏的定义就可以了如一个软件的多语言版本等如下CODE#include#definePRINT_STR"你好DD"main(){printf(
3、PRINT_STR);return0;}编译时会把PRINT_STR代替成"你好DD"以后想修改时就方便了另外也可以定义为函数#include#ifdef_DEBUG#defineA(x)a(x)#else#defineA(x)b(x)#endifinta(intx){returnx+1;}intb(intx){returnx+100;}intmain(){printf("A(10)valueis%d",A(10));return0;}[/code]其实也可以定义成#defineAa的但是定义成A(x)后只有A后面带一个(x)
4、类型的编译器才会执行替换比较安全可以保证只替换函数而不替换变量第四个可变参数宏有些时候定义一个宏来代替某个函数但是这个函数是可变参数的话那就需要考虑办法了定义方法如下CODE#definePRINT(...)printf(__VA_ARGS__)#includeintmain(){PRINT("%d%s%s",1,"吃饭了吗smileMM:)","");return0;}第五个宏组合也就是##和#的用法##是连接符号连接两个宏#是把名字代替成字符串如下CODE#defines5(a)supper_##a#include5、tdio.h>voidsupper_printf(constchar*a){printf("thisissupperprintf:%s",a);}intmain(){s5(printf)("helloowrld");return0;}#用法如下#include#defines(p)#pintmain(){printf(s(p)"");return0;}运行一下就知道了最后附上网上找到的宏定义的概念第一篇第九章预处理命令预处理的概念:编译之前的处理C的预处理主要有三个方面的内容:宏定义、文件包含、条件编译预处理命令以6、符号“#”开头。9.1宏定义9.1.1不带参数的宏定义宏定义又称为宏代换、宏替换,简称“宏”格式:#define标识符字符串其中的标识符就是所谓的符号常量,也称为“宏名”预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。即在对相关命令或语句的含义和功能作具体分析之前就要换,“不管三七二十一,先换了再说”。那么剩下的问题就简单了:1把谁换掉?2换成什么?#definePI3.1415926把程序中出现的PI全部换成3.1415926li9_1.c说明:7、(1)宏名一般用大写(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。(4)宏定义末尾不加分号;(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。(6)可以用#undef命令终止宏定义的作用域(7)宏定义可以嵌套li9_2.c(8)字符串""中永远不包含宏(9)宏定义不分配内存,变量定义分配内存。9.1.2带参数的宏除了一般的字符串替换,还要做参数代换格式:#define宏名(参数表)8、字符串例如:#defineS(a,B)a*barea=S(3,2);第一步被换为area=a*b;,第二步被换为area=3*2;类似于函数调用,有一
5、tdio.h>voidsupper_printf(constchar*a){printf("thisissupperprintf:%s",a);}intmain(){s5(printf)("helloowrld");return0;}#用法如下#include#defines(p)#pintmain(){printf(s(p)"");return0;}运行一下就知道了最后附上网上找到的宏定义的概念第一篇第九章预处理命令预处理的概念:编译之前的处理C的预处理主要有三个方面的内容:宏定义、文件包含、条件编译预处理命令以
6、符号“#”开头。9.1宏定义9.1.1不带参数的宏定义宏定义又称为宏代换、宏替换,简称“宏”格式:#define标识符字符串其中的标识符就是所谓的符号常量,也称为“宏名”预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。掌握"宏"概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。即在对相关命令或语句的含义和功能作具体分析之前就要换,“不管三七二十一,先换了再说”。那么剩下的问题就简单了:1把谁换掉?2换成什么?#definePI3.1415926把程序中出现的PI全部换成3.1415926li9_1.c说明:
7、(1)宏名一般用大写(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义(3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。(4)宏定义末尾不加分号;(5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。(6)可以用#undef命令终止宏定义的作用域(7)宏定义可以嵌套li9_2.c(8)字符串""中永远不包含宏(9)宏定义不分配内存,变量定义分配内存。9.1.2带参数的宏除了一般的字符串替换,还要做参数代换格式:#define宏名(参数表)
8、字符串例如:#defineS(a,B)a*barea=S(3,2);第一步被换为area=a*b;,第二步被换为area=3*2;类似于函数调用,有一
此文档下载收益归作者所有