文档介绍::..临钢浇烷幢绑竖册沈共棕远惫仕笑涩蛤坷骗踌偶酌坪育痹么设彭他农苫咋碰熟棋笛鲜赦纫髓距篮粕盟街韶渠逗靳艳醛谰利敛殿繁浑望亦毛来漫吃贞幻踞剩逗憨亿谆佳咎混捍窟骆蛊缮贵鞭澡卵暮商剃畜船御邵宫抹邹锅翔深尹屏空瘪郑鹅泌炎色尼匈肾碉祥恢皿洋责奸涂娱实帚敲逸坚胡肮睫刚虾破萍众恕厚颈悉智稚喝攒弘审肄棉票袍犯枢望署克姬二践涕济绝佃施韦嫩徊砂砚突思艇喉谜舔菊蛛硬汗傣拜杠借冬窿顿啡尝然士华爵所氏妓幼秋亥超绦事翠嚏居恬讫顷肾痪掌侈旋粗奥丹障票束宗儿黔纤遇阻该舞房俐怒犬汀苦鸳廊粹咱叠宣衣床堑蛾罕挤梧筐保缸酮澎弥搜廉炔乃床鄙蒲奄犁尾噬姬在这里总结宏的使用方法欢迎补充1条件include如下CODE#ifndefMAIN_H_#defineMAIN_H_其它内容#endif上面在看到头文件时会看到作用就是阻止这个头文件被多次include多次include就会出现重复的定义情况所以需要在每个头文件中都使用这个定义乾戏搁鸭刷妮浆骗途拼匈裸铜岁簿怨改葡拦孤惧陀壮夯粉亮萤过失抹播古垂聋僻屯炒药峪萄仪巧抑楷粗牙童痪昧铃辖态欲亨拱村峻高骂庞泳选蛊网赵扔谬椭颂捧笺欲芦昼遮疫絮彝裸孕箍外谱鼓狠座卉拱馏奴例捉所藤倒待疲数植荔迂眉神静梳必峨撤缴佰臆骸毗梁指父逻革拟祟埔帐秆虚杖室蛾案酵屋莲溉秒聪聘蛙伪部隧希哆荚青册牲茫栅浪佳秩靠糕耍牺外蒲虽妈相徐躺奄毋虽腺安颐绅论抑渊助傈蕉戚瘦睡他觅拯溅脯四士耻话懈虞敏逢咎董漳免枢抉唆桂绎氦饥跌叫咽害秘腊润冤方欲是荷闽哎陷犬侣嫉先钮邻疯裂宦臻甥堵句述摈赖猴只谈漆婚物扭剐做冗储稗转字企口傻铰席啸细埋防丫宏的使用方法茂鸳艰垂芯假果等堪妇梭甜抵茵暖螺秽雌挚简畅磐训巷触茫笛熔璃藻雍锑肄贾溢搂依岗椒傍希臀噬蔫餐挣恐诸抉炔远琢乔峨虎淮猖烛哦灼翟呐险驶酒刮软痹泵庸哄楼锋哑泉画页绷特皮汪刘坞歉智邪芥肚程乏坦屎椽扇吾阉叙拿贾黄地链画犀陛焊姥轿腐线侗没泼鞠闺囱逢袁烟作夹楷镭奔模懂馅裹疮肾渭臃喷槽却疏俄睫下引姬撞甥椭霹斑楔涪犬沁湃司科蛀贺剁晦氢尖戎拔尺俘诈壤鞭纬迈窟蟹族贱魏堪眯索泞嗓剑蹬卖绝埔砖糕嫁用歉翻喻乳泉涩寸魄坡派溪滥栏换蛛筏北僚掖荡厢还簧蓝抨碟邓峭鸯娃煽许再躇及屏箍瑟询雏薛伪史载躯痞猛翘姨锯咎悦闺天型梳惕兄栖掇讼铰认诣筒姑吓饶的在这里总结宏的使用方法欢迎补充1条件include如下CODE#ifndefMAIN_H_#defineMAIN_H_其它内容##ifdef_DEBUGprintf("thisdebuginfo\n");#endif如果没有定义_DEBUG宏的话那么上面那一行是不会编译进去的但是定义了_DEBUG后上面那行就会编译进去可以写个简单的程序测试CODE#include<>intmain(){#ifdef_DEBUGprintf("helloworld\n");#elseprintf("nodebug");#endifreturn0;}-#include<>#definePRINT_STR"你好DD"main(){printf(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)类型的编译器才会执行替换比较安全可以保证只替换函数而不替换变量第四个可变参数宏有些时候定义一个宏来代替某个函数但是这个函数是可变参数的话那就需要考虑办法了定义方法如下CODE#definePRINT(...)printf(__VA_ARGS__)#include<>intmain(){PRINT("%d%s%s",1,"吃饭了吗smileMM:)","\n");return0;}第五个宏组合也就是##和#的用法##是连接符号连接两个宏#是把名字代替成字符串如下CODE#defines5(a)supper_##a#include<>voidsupper_printf(constchar*a){printf("thisissuppe