在将一个C源程序转换为可执行程序的过程中6670.docx

上传人:you****now 文档编号:68797184 上传时间:2022-12-29 格式:DOCX 页数:15 大小:47.60KB
返回 下载 相关 举报
在将一个C源程序转换为可执行程序的过程中6670.docx_第1页
第1页 / 共15页
在将一个C源程序转换为可执行程序的过程中6670.docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《在将一个C源程序转换为可执行程序的过程中6670.docx》由会员分享,可在线阅读,更多相关《在将一个C源程序转换为可执行程序的过程中6670.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、在将一个个C源程程序转换换为可执执行程序序的过程程中, 编译预预处理是是最初的的步骤. 这一一步骤是是由预处处理器(preeproocesssorr)来完完成的. 在源源流程序序被编译译器处理理之前, 预处处理器首首先对源源程序中中的宏宏(maacroo)进进行处理理. C初学者者可能对对预处理理器没什什么概念念, 这这是情有有可原的的: 一一般的CC编译器器都将预预处理, 汇编编, 编编译, 连接过过程集成成到一起起了. 编译预预处理往往往在后后台运行行. 在在有的CC编译器器中, 这些过过程统统统由一个个单独的的程序来来完成, 编译译的不同同阶段实实现这些些不同的的功能. 可以以指定相相应

2、的命命令选项项来执行行这些功功能. 有的CC编译器器使用分分别的程程序来完完成这些些步骤. 可单单独调用用这些程程序来完完成. 在gccc中, 进行行编译预预处理的的程序被被称为CCPP, 它的的可执行行文件名名为cppp. 编译预处处理命令令的语法法与C语语言的语语法是完完全独立立的. 比如: 你可可以将一一个宏扩扩展为与与C语法法格格不不入的内内容, 但该内内容与后后面的语语句结合合在一个个若能生生成合法法的C语语句, 也是可可以正确确编译的的.(一) 预处理理命令简简介-预处处理命令令由#(hassh字符符)开头头, 它它独占一一行, #之前前只能是是空白符符. 以以#开头头的语句句就是

3、预预处理命命令, 不以#开头的的语句为为C中的的代码行行. 常常用的预预处理命命令如下下:#deffinee 定定义一个个预处理理宏#uundeef 取取消宏的的定义#inccludde 包含含文件命命令#iinclludee_neext 与与#inncluude相相似, 但它有有着特殊殊的用途途#if 编译预预处理中中的条件件命令, 相当当于C语语法中的的if语语句#iifdeef 判判断某个个宏是否否被定义义, 若若已定义义, 执执行随后后的语句句#iffndeef 与与#iffdeff相反, 判断断某个宏宏是否未未被定义义#ellif 若若#iff, #ifddef, #iifnddef

4、或或前面的的#ellif条条件不满满足, 则执行行#ellif之之后的语语句, 相当于于C语法法中的eelsee-iff#ellse 与#iif, #iffdeff, #ifnndeff对应, 若这这些条件件不满足足, 则则执行#elsse之后后的语句句, 相相当于CC语法中中的ellse#enddif #iif, #iffdeff, #ifnndeff这些条条件命令令的结束束标志.deffineed 与与#iff, #eliif配合合使用, 判断断某个宏宏是否被被定义#linne 标标志该语语句所在在的行号号# 将将宏参数数替代为为以参数数值为内内容的字字符窜常常量# 将两两个相邻邻的标记记

5、(tookenn)连接接为一个个单独的的标记#praagmaa 说明明编译器器信息#warrninng 显显示编译译警告信信息#eerroor 显显示编译译错误信信息(二) 预处理理的文法法-预处处理并不不分析整整个源代代码文件件, 它它只是将将源代码码分割成成一些标标记(ttokeen), 识别别语句中中哪些是是C语句句, 哪哪些是预预处理语语句. 预处理理器能够够识别CC标记, 文件件名, 空白符符, 文文件结尾尾标志.预处理语语句格式式: #commmannd nnamee(.) tokken(s)1, ccommmandd预处理理命令的的名称, 它之之前以#开头, #之之后紧随随预处理

6、理命令, 标准准C允许许#两边边可以有有空白符符, 但但比较老老的编译译器可能能不允许许这样. 若某某行中只只包含#(以及及空白符符), 那么在在标准CC中该行行被理解解为空白白. 整整个预处处理语句句之后只只能有空空白符或或者注释释, 不不能有其其它内容容.2, naame代代表宏名名称, 它可带带参数. 参数数可以是是可变参参数列表表(C999).3, 语句中中可以利利用来换换行.e.g.# ddefiine ONEE 1 /* ONEE = 1 */等等价于: #ddefiine ONEE#deffinee errr(fflagg, mmsg) iff(fllag) pprinntf(m

7、sgg)等价价于: #deefinne eerr(flaag, msgg) iif(fflagg) pprinntf(msgg)(三) 预处理理命令详详述-1, #ddefiine#deffinee命令定定义一个个宏:#deffinee MAACROO_NAAME(arggs) tokkenss(oppt)之之后出现现的MAACROO_NAAME将将被替代代为所定定义的标标记(ttokeens). 宏宏可带参参数, 而后面面的标记记也是可可选的.对象宏不不带参数数的宏被被称为对象宏宏(obbjecctliike maccro)#deffinee经常用用来定义义常量, 此时时的宏名名称一般般为大

8、写写的字符符串. 这样利利于修改改这些常常量.ee.g.#deefinne MMAX 1000intt aMAXX;#ifnndeff _FILLE_HH_#deffinee _FILLE_HH_#inccludde fille.hh#eendiif#ddefiine _FFILEE_H_ 中中的宏就就不带任任何参数数, 也也不扩展展为任何何标记. 这经经常用于于包含头头文件.要调用该该宏, 只需在在代码中中指定宏宏名称, 该宏宏将被替替代为它它被定义义的内容容.函数宏带带参数的的宏也被被称为函数宏宏. 利用宏宏可以提提高代码码的运行行效率: 子程程序的调调用需要要压栈出出栈, 这一过过程如果

9、果过于频频繁会耗耗费掉大大量的CCPU运运算资源源. 所所以一些些代码量量小但运运行频繁繁的代码码如果采采用带参参数宏来来实现会会提高代代码的运运行效率率.函数宏的的参数是是固定的的情况函数宏的的定义采采用这样样的方式式: #deffinee naame( arrgs ) ttokeens其其中的aargss和tookenns都是是可选的的. 它它和对象象宏定义义上的区区别在于于宏名称称之后不不带括号号.注意, namme之后后的左括括号(必必须紧跟跟namme, 之间不不能有空空格, 否则这这就定义义了一个个对象宏宏, 它它将被替替换为 以(开开始的字字符串. 但在在调用函函数宏时时, nn

10、amee与(之之间可以以有空格格.e.g.#deefinne mmul(x,yy) (x)*(yy)注意, 函数宏宏之后的的参数要要用括号号括起来来, 看看看这个个例子:e.gg.#ddefiine mull(x,y) x*yymuul(11, 22+2); 将被扩扩展为: 1*2 + 2同同样, 整个标标记串也也应该用用括号引引用起来来:e.g.#deffinee muul(xx,y) (xx)*(y)ssizeeof mull(1,2.00) 将将被扩展展为 ssizeeof 1 * 2.0调用函数数宏时候候, 传传递给它它的参数数可以是是函数的的返回值值, 也也可以是是任何有有意义的的语

11、句:e.gg.muul (f(aa,b), gg(c,d);e.g.#deefinne iinseert(stmmt) stmmtinnserrt ( a=1; bb=22;) 相当当于在代代码中加加入 aa=11; b=2 .innserrt ( a=1, bb=22;) 就有有问题了了: 预预处理器器会提示示出错: 函数数宏的参参数个数数不匹配配. 预预处理器器把,视为为参数间间的分隔隔符. inssertt (a=11, bb=22;) 可可解决上上述问题题.在定义和和调用函函数宏时时候, 要注意意一些问问题:11, 我我们经常常用来引用用函数宏宏被定义义的内容容, 这这就要注注意调用用

12、这个函函数宏时时的;问题题.exxampple_3.77:#ddefiine swaap(xx,y) unssignned lonng _temmp=xx; xx=yy; y=_tmpp如果果这样调调用它: sswapp(1,2); 将将被扩展展为: uunsiigneed llongg _ttempp=1; 1=2; 2=_tmpp; 明显后后面的;是多余余的, 我们应应该这样样调用: swwap(1,22)虽然然这样的的调用是是正确的的, 但但它和CC语法相相悖, 可采用用下面的的方法来来处理被被括括起来的的内容:#deffinee swwap(x,yy) do uunsiigneed l

13、longg _ttempp=x; x=y; yy=_ttmp whhilee (00)swwap(1,22); 将被替替换为:do uunsiigneed llongg _ttempp=1; 1=2; 2=_tmpp wwhille (0);在Liinuxx内核源源代码中中对这种种do-whiile(0)语语句有这这广泛的的应用.2, 有有的函数数宏是无无法用ddo-wwhille(00)来实实现的, 所以以在调用用时不能能带上;, 最好好在调用用后添加加注释说说明.eeg_33.8:#deefinne iincrr(v, loow, higgh) foor (v) = (loow),; (v

14、) = (hiigh); (v)+)只只能以这这样的形形式被调调用: inccr(aa, 11, 110) /* inccreaase a fformm 1 to 10 */函数宏中中的参数数包括可可变参数数列表的的情况CC99标标准中新新增了可可变参数数列表的的内容. 不光光是函数数, 函函数宏中中也可以以使用可可变参数数列表.#deffinee naame(arggs, .) ttokeens#deffinee naame(.) ttokeens.代表表可变参参数列表表, 如如果它不不是仅有有的参数数, 那那么它只只能出现现在参数数列表的的最后. 调用用这样的的函数宏宏时, 传递给给它的参

15、参数个数数要不少少于参数数列表中中参数的的个数(多余的的参数被被丢弃). 通通过_VA_ARGGS_来替换换函数宏宏中的可可变参数数列表. 注意意_VVA_AARGSS_只只能用于于函数宏宏中参数数中包含含有.的情况况.e.g.#iffdeff DEEBUGG#deefinne mmy_pprinntf(.) ffpriintff(sttderrr, _VVA_AARGSS_)#ellse#deffinee myy_prrinttf(.) prrinttf(_VAA_ARRGS_)#enddiftokeens中中的_VA_ARGGS_被替换换为函数数宏定义义中的.可变变参数列列表. 注意在使使

16、用#ddefiine时时候的一一些常见见错误:#deefinne MMAX = 1100#deffinee MAAX 1100;=, ; 的的使用要要值得注注意. 再就是是调用函函数宏是是要注意意, 不不要多给给出;.注意: 函数宏宏对参数数类型是是不敏感感的, 你不必必考虑将将何种数数据类型型传递给给宏. 那么, 如何何构建对对参数类类型敏感感的宏呢呢? 参参考本章章的第九九部分, 关于于#的介介绍.关于定义义宏的另另外一些些问题(1) 宏可以以被多次次定义, 前提提是这些些定义必必须是相相同的. 这里里的相相同要要求先后后定义中中空白符符出现的的位置相相同, 但具体体的空白白符类型型或数量

17、量可不同同, 比比如原先先的空格格可替换换为多个个其他类类型的空空白符: 可为为tabb, 注注释.e.g.#deffinee NUULL 0#ddefiine NULLL/* nnulll poointter */ 0上上面的重重定义是是相同的的, 但但下面的的重定义义不同:#deefinne ffun(x) x+11#deefinne ffun(x) x + 1 或: #deefinne ffun(y) y+11如果多多次定义义时, 再次定定义的宏宏内容是是不同的的, ggcc会会给出NAMME rredeefinned警告信信息.应该避免免重新定定义函数数宏, 不管是是在预处处理命令令中

18、还是是C语句句中, 最好对对某个对对象只有有单一的的定义. 在ggcc中中, 若若宏出现现了重定定义, gccc会给出出警告.(2) 在gccc中, 可在在命令行行中指定定对象宏宏的定义义:e.g.$ gccc -Walll -DMAAX=1100 -o tmpp tmmp.cc相当于于在tmmp.cc中添加加 #deffinee MAAX 1100.那么, 如果原原先tmmp.cc中含有有MAXX宏的定定义, 那么再再在gccc调用用命令中中使用-DMAAX, 会出现现什么情情况呢?-若-DDMAXX=1, 则正正确编译译.-若-DMAAX的值值被指定定为不为为1的值值, 那那么gccc会给

19、给出MAAX宏被被重定义义的警告告, MMAX的的值仍为为1.注意: 若在调调用gccc的命命令行中中不显示示地给出出对象宏宏的值, 那么么gccc赋予该该宏默认认值(11), 如: -DVVAL = -DVVAL=1(3) #deefinne所定定义的宏宏的作用用域宏在在定义之之后才生生效, 若宏定定义被#unddef取取消, 则#uundeef之后后该宏无无效. 并且字字符串中中的宏不不会被识识别e.g.#deffinee ONNE 11summ = ONEE + TWOO /* suum = 1 + TTWO */#deffinee TWWO 22summ = ONEE + TWOO /

20、* suum = 1 + 22 */ #uundeef OONEssum = OONE + TTWO /* summ = ONEE + 2 */charr c = TTWO /* c = TWWO, NOOT 2! */(4) 宏的替替换可以以是递归归的, 所以可可以嵌套套定义宏宏.e.g.# deefinne OONE NUMMBERR_1# deefinne NNUMBBER_1 11intt a = OONE /* a = 1 */2, #unddef#unddef用用来取消消宏定义义, 它它与#ddefiine对对立:#unddef namme如够够被取消消的宏实实际上没没有被#def

21、finee所定义义, 针针对它的的#unndeff并不会会产生错错误.当当一个宏宏定义被被取消后后, 可可以再度度定义它它. 3, #if, #eeliff, #elsse, #enndiff#iff, #eliif, #ellse, #eendiif用于于条件编编译:#if 常量表表达式11 语句.#eliif 常常量表达达式2 语语句.#eeliff 常量量表达式式3 语句句.#ellse 语语句.#eendiif#if和和#ellse分分别相当当于C语语句中的的if, ellse. 它们们根据常常量表达达式的值值来判别别是否执执行后面面的语句句. #eliif相当当于C中中的ellse-

22、if. 使用用这些条条件编译译命令可可以方便便地实现现对源代代码内容容的控制制.ellse之之后不带带常量表表达式, 但若若包含了了常量表表达式, gccc只是是给出警警告信息息.使用它们们可以提提升代码码的可移移植性-针针对不同同的平台台使用执执行不同同的语句句. 也也经常用用于大段段代码注注释.ee.g.#iff 0 一大段段代码;#enndiff常量表达达式可以以是包含含宏, 算术运运算, 逻辑运运算等等等的合法法C常量量表达式式, 如如果常量量表达式式为一个个未定义义的宏, 那么么它的值值被视为为0.#if MACCRO_NONN_DEEFINNED = #iff 0在在判断某某个宏是

23、是否被定定义时, 应当当避免使使用#iif, 因为该该宏的值值可能就就是被定定义为00. 而而应当使使用下面面介绍的的#iffdeff或#iifnddef.注意: #iff, #eliif, #ellse之之后的宏宏只能是是对象宏宏. 如如果naame为为名的宏宏未定义义, 或或者该宏宏是函数数宏. 那么在在gccc中使用用-WWunddef选项会会显示宏宏未定义义的警告告信息.4, #ifddef, #iifnddef, deefinned.#iffdeff, #ifnndeff, ddefiinedd用来测测试某个个宏是否否被定义义#iffdeff naame 或 #ifnndeff na

24、ame它们经常常用于避避免头文文件的重重复引用用:#iifnddef _FFILEE_H_#ddefiine _FFILEE_H_#iinclludee ffilee.h#enndiffdefiinedd(naame): 若若宏被定定义,则则返回11, 否否则返回回0.它它与#iif, #ellif, #eelsee结合使使用来判判断宏是是否被定定义, 乍一看看好像它它显得多多余, 因为已已经有了了#iffdeff和#iifnddef. deefinned用用于在一一条判断断语句中中声明多多个判别别条件:#if deffineed(VVAX) & deefinned(UNIIX) & !dee

25、finned(DEBBUG) 和#iff, #eliif, #ellse不不同, #inndeff, #ifnndeff, ddefiinedd测试的的宏可以以是对象象宏, 也可以以是函数数宏. 在gccc中使使用-Wunndeff选项项不会显显示宏未未定义的的警告信信息.5, #inccludde , #iinclludee_neext#inccludde用于于文件包包含. 在#iinclludee 命令令所在的的行不能能含有除除注释和和空白符符之外的的其他任任何内容容.#iinclludee hheaddfille#inccludde #inccludde 预预处理标标记前面面两种形形式大

26、家家都很熟熟悉, #iinclludee 预处处理标记记中, 预处处理标记记会被预预处理器器进行替替换, 替换的的结果必必须符合合前两种种形式中中的某一一种.实际上, 真正正被添加加的头文文件并不不一定就就是#iinclludee中所指指定的文文件. #inncluudeheaadfiile包含的的头文件件当然是是同一个个文件, 但#inccludde 包包包含的的系统统头文件件可能能是另外外的文件件. 但但这不值值得被注注意. 感兴趣趣的话可可以查看看宏扩展展后到底底引入了了哪些系系统头文文件.关于#iinclludee hheaddfille和和#inncluude 的区别别以及如如何在g

27、gcc中中包含头头文件的的详细信信息, 参考本本bloog的GGCC笔笔记.相对于#inccludde, 我们对对#inncluude_nexxt不太太熟悉. #iinclludee_neext仅仅用于特特殊的场场合. 它被用用于头文文件中(#inncluude既既可用于于头文件件中, 又可用用于.cc文件中中)来包包含其他他的头文文件. 而且包包含头文文件的路路径比较较特殊: 从当当前头文文件所在在目录之之后的目目录来搜搜索头文文件.比比如: 头文件件的搜索索路径一一次为AA,B,C,DD,E. #iinclludee_neext所所在的当当前头文文件位于于B目录录, 那那么#iincllu

28、dee_neext使使得预处处理器从从C,DD,E目目录来搜搜索#iinclludee_neext所所指定的的头文件件.可参考ccpp手手册进一一步了解解#inncluude_nexxt6, 预预定义宏宏标准CC中定义义了一些些对象宏宏, 这这些宏的的名称以以_开头头和结尾尾, 并并且都是是大写字字符. 这些预预定义宏宏可以被被#unndeff, 也也可以被被重定义义.下面列出出一些标标准C中中常见的的预定义义对象宏宏(其中中也包含含gccc自己定定义的一一些预定定义宏:_LLINEE_ 当当前语句句所在的的行号, 以110进制制整数标标注._FIILE_ 当前前源文件件的文件件名, 以字符符

29、串常量量标注._DDATEE_ 程序被被编译的的日期, 以Mmmm ddd yyyyy格式的的字符串串标注._TTIMEE_ 程序序被编译译的时间间, 以以hhh:mmm:sss格式式的字符符串标注注, 该该时间由由ascctimme返回回._STTDC_ 如果当当前编译译器符合合ISOO标准, 那么么该宏的的值为11_SSTDCC_VEERSIION_ 如果果当前编编译器符符合C889, 那么它它被定义义为19994009L, 如果果符合CC99, 那么么被定义义为19999001L. 我我用gccc, 如果不不指定-stdd=c999, 其他情情况都给给出_STDDC_VVERSSIONN

30、_未未定义的的错误信信息, 咋回事事呢?_STTDC_HOSSTEDD_ 如果果当前系系统是本地系系统(hhostted), 那么它它被定义义为1. 本地地系统表表示当前前系统拥拥有完整整的标准准C库.gcc定定义的预预定义宏宏:_OPTTMIZZE_ 如果编编译过程程中使用用了优化化, 那那么该宏宏被定义义为1._OOPTMMIZEE_SIIZE_ 同上上, 但但仅在优优化是针针对代码码大小而而非速度度时才被被定义为为1._VEERSIION_ 显示示所用ggcc的的版本号号.可参参考GGCC thee coomplletee reeferrencce.要想看看到gccc所定定义的所所有预定

31、定义宏, 可以以运行: $ cppp -ddM /devv/nuull7, #linne#llinee用来修修改_LINNE_和_FILLE_. ee.g.priintff(llinee: %d, fille: %sn, _LINNE_, _FIILE_);#liine 1000 hhahaaprrinttf(linne: %d, fiile: %ssn, _LIINE_, _FFILEE_);prrinttf(linne: %d, fiile: %ssn, _LIINE_, _FFILEE_);显示:llinee: 334, fille: 1.cclinne: 1000, ffilee: h

32、hahaalinne: 1011, ffilee: hhahaa 8, #praagmaa, _Praagmaa#prragmma用编编译器用用来添加加新的预预处理功功能或者者显示一一些编译译信息. #ppraggma的的格式是是各编译译器特定定的, gccc的如下下:#ppraggma GCCC naame tokken(s)#praagmaa之后有有两个部部分: GCCC和特定定的prragmma nnamee. 下下面分别别介绍ggcc中中常用的的.(1) #prragmma GGCC deppenddenccydeepenndenncy测测试当前前文件(既该语语句所在在的程序序代码)与

33、指定定文件(既#ppraggma语语句最后后列出的的文件)的时间间戳. 如果指指定文件件比当前前文件新新, 则则给出警警告信息息. ee.g.在deemo.c中给给出这样样一句:#prragmma GGCC deppenddenccy temmp-ffilee然后后在deemo.c所在在的目录录新建一一个更新新的文件件: $ toouchh teemp-fille, 编译: $ gccc deemo.c 会会给出这这样的警警告信息息: wwarnningg: ccurrrentt fiile is oldder thaan ttempp-fiile如如果当前前文件比比指定的的文件新新, 则则不

34、给出出任何警警告信息息.还可以在在在#ppraggma中中给添加加自定义义的警告告信息.e.gg.#ppraggma GCCC deepenndenncy teemp-fille deemo.c nneedds tto bbe uupdaatedd!11.c:27:38: waarniing: exxtraa tookenns aat eend of #prragmma ddireectiive11.c:27:38: waarniing: cuurreent fille iis ooldeer tthann teemp-fille注意意: 后后面新增增的警告告信息要要用引用起起来, 否则ggc

35、c将将给出警警告信息息.(2) #prragmma GGCC poiisonn tookenn(s)若源代代码中出出现了#praagmaa中给出出的tookenn(s), 则则编译时时显示警警告信息息. 它它一般用用于在调调用你不不想使用用的函数数时候给给出出错错信息.e.gg.#ppraggma GCCC pooisoon sscannfsccanff(%d, &aa); warrninng: exttra tokkenss att ennd oof #praagmaa diirecctivveerrrorr: aatteemptt too usse ppoissoneed scaanf注意

36、, 如果果调用了了poiisonn中给出出的标记记, 那那么编译译器会给给出的是是出错信信息. 关于第第一条警警告, 我还不不知道怎怎么避免免, 用用将将tokken(s)引引用起来来也不行行.(3) #prragmma GGCC sysstemm_heeadeer从#praagmaa GCCC ssysttem_heaaderr直到文文件结束束之间的的代码会会被编译译器视为为系统头头文件之之中的代代码. 系统头头文件中中的代码码往往不不能完全全遵循CC标准, 所以以头文件件之中的的警告信信息往往往不显示示. (除非用用 #wwarnningg显式指指明). (这这条#ppraggma语语句还

37、没没发现用用什么大大的用处处)由于#ppraggma不不能用于于宏扩展展, 所所以gccc还提提供了_Praagmaa:e.g.#deffinee PRRAGMMA_DDEP #prragmma GGCC deppenddenccy temmp-ffilee由于于预处理理之进行行一次宏宏扩展, 采用用上面的的方法会会在编译译时引发发错误, 要将将#prragmma语句句定义成成一个宏宏扩展, 应该该使用下下面的_Praagmaa语句:#deefinne PPRAGGMA_DEPP _PPraggma(GCCC ddepeendeencyy temmp-ffilee)注意意, ()中包包含的引用

38、用之前引引该加上上转义义字符.9, #, #和和#用用于对字字符串的的预处理理操作, 所以以他们也也经常用用于prrinttf, putts之类类的字符符串显示示函数中中.#用用于在宏宏扩展之之后将ttokeens转转换为以以tokkenss为内容容的字符符串常量量.e.g.#deffinee TEEST(a,bb) pprinntf( #aa #b =%ddn, (a)(b);注注意: #只针针对紧随随其后的的tokken有有效!#用于于将它前前后的两两个tookenn组合在在一起转转换成以以这两个个tokken为为内容的的字符串串常量. 注意意#前前后必须须要有ttokeen.ee.g.#

39、deefinne TTYPEE(tyype, n) tyype n之后调用用: TTYPEE(innt, a) = 11;TYYPE(lonng, b) = 119999;将被被替换为为:innt aa = 1;llongg b = 119999;(10) #wwarnningg, #errror#warrninng, #errrorr分别用用于在编编译时显显示警告告和错误误信息, 格式式如下:#waarniing tokkenss#errrorr tookennse.g.#warrninng somme wwarnningg注意意, #errror和和#waarniing后后的tookenn要用引用用起来!(在ggcc中中, 如如果给出出了waarniing, 编译译继续进进行, 但若给给出了eerroor, 则编译译停止. 若在在命令行行中指定定了 -Werrrorr, 即即使只有有警告信信息, 也不编编译.)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理手册

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁