1、简述内部函数与外部函数的区别。
答︰
函数有内部函数与外部函数之分。函数本质上是外部的,可以供本文件或其他文件中的函数调用,但是在其他文件调用时要用extern对函数进行声明。如果在定义函数时用static声明,表示其他文件不得调用此函数,即把它“屏蔽”起来。
2、简述库函数和自己定义的函数的区别。
答︰
从用户使用的角度看,函数有两种:
①库函数,即标准函数。这是由系统提供的,用户不必自己定义这些函数,可以直接使用它们。
②用户自己定义的函数,用来解决用户的特殊需要。
如果在程序中使用库函数,必须在本文件的开头用#include指令把与该函数有关的头文件包含到本文件中来,如用数学函数时要加上#include <math.h>。如果用用户自己定义的函数,必须先定义,后调用。需要注意的是,如果函数的调用出现在函数定义位置之前,应该在调用函数之前用函数的原型对该函数进行引用声明。
3、带参的宏与函数有什么区别?
答︰
1.函数调用,求出实参表达式的值,再带入形参。而宏只进行简单的字符替换。
2.函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。
3.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。
4.调用函数只可得到一个返回值,而用宏可以设法得到几个结果。
5.使用宏次数多时,每展开一次都使程序增长,而函数调用不使源程序变长。
6.宏不占运行时间,只占编译时间;函数占运行时间(分配、保留、值传递、返回)。
4、简述全局变量与局部变量。
答:
第一,变量的作用域是指变量有效的范围。根据定义变量的位置不同,变量分为局部变量和全局变量。
第二,凡是在函数内或复合语句中定义的变量称为局部变量,其作用域限制在函数内或复合语句内,函数外或复合语句外不能引用该变量。
第三,在函数外定义的变量称为全局变量,它的有效范围为从定义变量的位置开始到本源文件结束。可以用extern对变量作“外部声明”,将作用域扩展到本文件中作extern声明的位置处,或在其他文件中用extern声明将作用域扩展到其他文件。用static声明的静态全局变量禁止其他文件引用该变量,只限本文件内引用。
5、使用全局变量的优点和缺点是什么?
答:
(1)优点:①所有函数之前定义的全局变量可被本文件中所有函数共用;②全局变量的有效范围是它定义的位置到本源文件结束;③全局变量增加了函数之间的联系通道;④全局变量与局部变量重名时,在函数内部将屏蔽全局变量。
(2)缺点:①过多的全局变量使函数之间的“耦合性”增加,不利于程序的移植;②过多的全局变量使程序的可读性变差;③外部变量可加强函数模块之间的数据联系,但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降低;④从模块化程序设计的观点来看这是不利的,因此,不是非用不可时建议不使用外部变量;⑤全局变量在程序执行的全过程都占用存储单元。