找回密码
 注册

QQ登录

只需一步,快速开始

查看: 780|回复: 0

吉大《c语言程序设计》21春复习指导(六)

[复制链接]
发表于 2021-2-22 10:22:04 | 显示全部楼层 |阅读模式
吉大《C语言程序设计》FAQ(六)
一、预处理程序(preprocessor)有什么作用????
??C语言预处理程序的作用是根据源代码中的预处理指令修改你的源代码。预处理指令是一种命令语句(如#define),它指示预处理程序如何修改源代码。在对程序进行通常的编译处理之前,编译程序会自动运行预处理程序,对程序进行编译预处理,这部分工作对程序员来说是不可见的。
??预处理程序读入所有包含的文件以及待编译的源代码,然后生成源代码的预处理版本。在预处理版本中,宏和常量标识符已全部被相应的代码和值替换掉了。如果源代码中包含条件预处理指令(如#if),那么预处理程序将先判断条件,再相应地修改源代码。二、什么是宏(macro)?怎样使用宏?
??宏是一种预处理指令,它提供了一种机制,可以用来替换源代码中的字符串,宏是用“#define"语句定义的,下面是一个宏定义的例子:
??#define VERSION?STAMP "1.02"
使用宏有以下几点好处;
??(1)在输入源代码时,可省去许多键入操作。???
??(2)因为宏只需定义一次,但可以多次使用,所以使用宏能增强程序的易读性和可靠性。
??(3)使用宏不需要额外的开销,因为宏所代表的代码只在宏出现的地方展开,因此不会引起程序中的跳转。
??(4)宏的参数对类型不敏感,因此你不必考虑将何种数据类型传递给宏。
??? 需要注意的是,在宏名和括起参数的括号之间绝对不能有空格。此外,为了避免在翻译宏时产生歧义,宏体也应该用括号括起来。三、怎样避免多次包含同一个头文件??
??通过#ifndef和#define指令,你可以避免多次包含同一个头文件。在创建一个头文件时,你可以用#define指令为它定义一个唯一的标识符名称。你可以通过#ifndef指令检查这个标识符名称是否已被定义,如果已被定义,则说明该头文件已经被包含了,就不要再次包含该头文件;反之,则定义这个标识符名称,以避免以后再次包含该头文件。四、用#define指令说明常量有什么好处?
如果用#define指令说明常量,常量只需说明一次,就可多次在程序中使用,而且维护程序时只需修改#define语句,不必一一修改常量的所有实例。例如,如果在程序中要多次使用PI(约3.14159),就可以象下面这样说明一个常量:???
??#define PI 3.14159
??如果想提高PI的精度,只需修改在#define语句中定义的PI值,就不必在程序中到处修改了。通常,最好将#define语句放在一个头文件中,这样多个模块就可以使用同一个常量了。
??用#define指令说明常量的另一个好处是占用的内存最少,因为以这种方式定义的常量将直接进入源代码,不需要再在内存中分配变量空间。
??但是,这种方法也有缺点,即大多数调试程序无法检查用#define说明的常量。
??用#define指令说明的常量可以用#under指令取消。这意味着,如果原来定义的标识符(如NULL)不符合你的要求,你可以先取消原来的定义,然后重新按自己的要求定义一个标识符五、使用宏更好,还是使用函数更好?
??这取决于你的代码是为哪种情况编写的。宏与函数相比有一个明显的优势,即它比函数效率更高(并且更快),因为宏可以直接在源代码中展开,而调用函数还需要额外的开销。但是,宏一般比较小,无法处理大的、复杂的代码结构,而函数可以。此外,宏需要逐行展开,因此宏每出现一次,宏的代码就要复制一次,这样你的程序就会变大,而使用函数不会使程序变大。
??一般来说,应该用宏去替换小的、可重复的代码段,这样可以使程序运行速度更快;当任务比较复杂,需要多行代码才能实现时,或者要求程序越小越好时,就应该使用函数。六、在程序中加入注释的最好方法是什么?
??大部分C编译程序为在程序中加注释提供了以下两种方法:
?? (1)分别是用符号“/*”和“*/”标出注释的开始和结束,在符号“/*”和“*/”之间的任何内容都将被编译程序当作注释来处理。这种方法是在程序中加入注释的最好方法。
例如,你可以在程序中加入下述注释:
??? /*
??? This portion Of the program contains
??? a comment that is several lines long
??? and is not included in the compiled
??? Version Of the program.
??? */
(2)用符号“// ”标出注释行,从符号“// ”到当前行末尾之间的任何内容都将被编译程序当作注释来处理。当要加入一行独立的注释时,使用符号“//”是最方便的。但是,对于上面的例子,由于一段独立的注释中有4行内容,因此使用符号“//”是不合适的,请看下例:
??? // This portion Of the program contains???
??? // a? comment? that? is? several? lines? long
??? // and is not included in the compiled???
??? // Version Ofthe program.
??需要注意的是,用符号"// "加入注释的方法与ANSI标准是不兼容的,许多版本较早的编译程序不支持这种方法。七、包含文件可以嵌套吗?
?包含文件可以嵌套,但你应该避免多次包含同一个文件。东师作业答案可以联系QQ 761296021

QQ|手机版|小黑屋|网站地图|无忧答案网 ( 冀ICP备18010495号-1 )

GMT+8, 2024-5-4 14:27

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表