编译预处理与带参数的主函数典型例题

编译预处理与带参数的主函数典型例题,第1张

编译预处理与带参数的主函数典型例题,第2张

1 如果要将某个宏定义的作用域限定在定义点到某条语句之前,则应该在该条语句前面插入一条命令________________。
【分析】关于宏定义的定义域,教材中有明确说明(pl95)。如果源程序清单中没有命令“#undef”则定义域为定义点到本程序的末尾;如果有命令“ #undef”,则定义域是从定义点到该命令之前。
【答案】 #undef
2 设有下列两条宏定义命令,则表达式“B/B”的值为()
# define A 3+2
# define B A * A
① 1 ② 5 ③25 ④ 17
【分析】首先对表达式中的宏名“B”进行宏替换,替换后的表达式为“A*A/A*A”,再对其中的定名“A”进行宏替换,替换后的表达式为“3+2* 3+2/3+ 2*3+2”,按照算术运算符的优先级别,计算结果为17,所以本题的答案应为④。
【答案】 ④
3 设有宏定义命令“#define ABC(A,B,c)(A)?(B):(c)”,则表达式“ABC(ABC(1,2,3,ABC(2,3,1), ABC(3,2,1))”的运算结果是________________。
【分析】这是带参数的宏,替换后的表达式如下:
((1)?(2):(3))?((2)?(3):(1)):((3)?(2):(1))
第1个圆括号中的条件表达式的值为2;第2个圆括号中的条件表达式的值为3;第3个圆括号中的条件表达式的值为2。上述表达式最后形成的条件表达式为:2?3:2,结果为3。
【答案】 3
4 使用包含命令时,如果包含文件名是用尖括号括住的(即<包含文件名>),则系统将在_____________路径下寻找该包含文件。
【分析】教材中有明确答案(P198)。
【答案】系统规定的
5 假定有下列4个名为p1.c、p2.c、p3.c、p4.c的源程序文件,则其中能正确编译并执行的源程序是()
/* p1.c的文件内容:*/ /* pZ.C的文件内容:*/
main() float f()
{ float x; { float y;
x=f(); scanf("%f",&y);
printf("%f\n",x); return(y);
 } }
#include"p1.c"
/* p3.c的文件内容:*/ /* p4.c的文件内容:*/
# include"p1.c" # include"p2.c"
# Include"p2.c" # Include"p1.c"
① p1.c ②p2.c ③p3.c ④p4.c
【分析】分析备选答案①:该程序编译时,将会出现函数f()没有定义的错误。分析备选答案②:该程序清单在预编译时,包含命令将用p1.c的程序清单替换,函数f()的定义在调用之前,所以该程序将会顺利通过编译,并且可以执行,该答案是正确的,符合题意。至于备选答案③和④,均会出现有两个主函数的错误。
【答案】 ②
6 假定前面已经有宏定义命令“#define A 1”,则下列条件编译命令中,正确的是()
① #if A ② #ifdef A ③ #undef A ④#ifndef A
3+2;    3+2;     3+2; 3+2;
#else     #elsedef #elseundef #else
3-2;     3-2;       3-2;       3-2;
#endif #enddef #end       #end
【分析】分析备选答案①:这是符合教材中介绍的第一种条件编译命令的格式,其中的条件是“A”,这是一个表达式,宏替换后的结果为1(逻辑真),所以该答案是正确的,符合题意。显然其他的备选答案都是错误的。答案②中的#elsedef和#enddef都是错误的;答案③中的#undef、#elseundef和#end都是错误的。答案④中的#end是错误的。
【答案】 ①
7 带参数的主函数中,形式参数argc的数据类型是________________型;argv是指向______________型数据的指针型数组,该数组的长度是_______________。
【分析】教材中有明确答案(p202)。
【答案】 整  或者  int
字符 或者 char
argc 或者 执行主函数时,命令行中的参数数目
8 下列带参宏的功能是交换两个参数值,请填写所缺少的语句。并说明这个宏引用时的注意事项。
#define H(X,Y){X=X+Y;Y=X-Y;_____________;}
宏引用时的注意事项:___________________________________________
【分析】带参宏H(X,Y)对应的一串符号是3条语句,其功能将完成参数X和Y值的交换。
我们来分析这3条语句的具体功能:
第1条语句:X=X+Y    X中是X和Y的和,Y值没变,仍是原Y值;
第2条语句:Y=X-Y     X没变,仍是X和Y的和,Y中是原X值;.
第3条语句应该完成的功能是:X的值是原Y的位,由于现在的X中是X和Y
的和,Y中是原X的值,所以使用“X=X-Y’就可以使得X获得的是原Y值。
由于带参宏的两个参数(X、Y)在定名对应的一串符号中出现在赋值表达式的左边,所以宏引用时,这些参数对应的实际参数必须是变量。数组元素、*指针变量等,不能是表达式。此外,由于本宏对应的“一串符号”是一个复合语句,因此,本宏的引用只能作为语句,不能作为表达式。
【答案】X=X-Y
实际参数只能是变量、数组元素、*指针变量等,不能是表达式;此外本宏的引用只能是语句形式。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 编译预处理与带参数的主函数典型例题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情