c语言习题集合预处理命令

合集下载

C语言习题集(预处理命令篇)

C语言习题集(预处理命令篇)

第六章预处理命令6.1 选择题1.下面叙述中正确的是()。

A. 带参数的宏定义中参数是没有类型的B. 宏展开将占用程序的运行时间C. 宏定义命令是C语言中的一种特殊语句D. 使用#include命令包含的头文件必须以“.h”为后缀2.下面叙述中正确的是()。

A. 宏定义是C语句,所以要在行末加分号B. 可以使用#undef命令来终止宏定义的作用域C. 在进行宏定义时,宏定义不能层层嵌套D. 对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换3.在“文件包含”预处理语句中,当#include后面的文件名用双引号括起时,寻找被包含文件的方式为()。

A. 直接按系统设定的标准方式搜索目录B. 先在源程序所在目录搜索,若找不到,再按系统设定的标准方式搜索C. 仅仅搜索源程序所在目录D. 仅仅搜索当前目录4.下面叙述中不正确的是()。

A. 函数调用时,先求出实参表达式,然后带入形参。

而使用带参的宏只是进行简单的字符替换B. 函数调用是在程序运行时处理的,分配临时的内存单元。

而宏展开则是在编译时进行的,在展开时也要分配内存单元,进行值传递C. 对于函数中的实参和形参都要定义类型,二者的类型要求一致,而宏不存在类型问题,宏没有类型D. 调用函数只可得到一个返回值,而用宏可以设法得到几个结果5.下面叙述中不正确的是()。

A. 使用宏的次数较多时,宏展开后源程序长度增长。

而函数调用不会使源程序变长B. 函数调用是在程序运行时处理的,分配临时的内存单元。

而宏展开则是在编译时进行的,在展开时不分配内存单元,不进行值传递C. 宏替换占用编译时间D. 函数调用占用编译时间6.下面叙述中正确的是( )。

A. 可以把define和if定义为用户标识符B. 可以把define定义为用户标识符,但不能把if定义为用户标识符C. 可以把if定义为用户标识符,但不能把define定义为用户标识符D. define和if都不能定义为用户标识符7.下面叙述中正确的是()。

C语言 第九章 预处理命令

C语言 第九章 预处理命令
第九章 预处理命令
目的: 简化程序的编写 ; 提高程序的模块化、可读性、可移植性。
有三种类型的预处理命令: 1. 宏定义命令; 2. 文件包含命令; 3. 条件编译命令。
为了与C语句区别,这些命令均以“ # ”开头。
处理流程: 第一次编译扫描时,将预编译命令处理完, 然后再进行正式编译,生成目标代码。
#define f(a)
(a)* b
若有:f(x+y) 则应有:
(x+y)b
若有:f(x+y+z) 则应有:
预编译后, z = f(x+y) 变成: z = x+y*b 结果为: z=31
(x+y+z)b
(这个结果与初始设想不一致)
“带参数宏定义” 必须注意以下几个方面: 1. 宏定义时要考虑实参(替换)的各种可能, 防止出 现二义性。
3. #include后的文件名既可用“ ”,也可用< >, 二者区别:
“ ”首先在当前目录中找,然后再去标准目录中找。
< > 只在标准目录(include目录)中找。
为提高预处理的搜索效率,通常对自定义的 非标准头文件使用方式一;而对系统提供的标准 头文件(如:math.h、stdio.h等)使用方式二。
将返回值 6 将返回值 8
但二者还是有区别的:
1) 宏替换在预编译时进行;
而函数调用在程序运行时进行
2) 宏展开时,仅仅是将宏体中的形参简单 地置换为实参,不计算实参值,也不会带来任何 返回值; 而函数调用要进行: l 计算实参值(假定用 2+3、 9–1作为实参将 被计算出来)、 l参数传递(将 5、8 传给形参x、y)、
这些文件要用到公用信息时,只要在文件 中加入#include “f.h”这么一行命令既可。这样 就不必在f1.c、…… 、fn.c每个文件中都去重 复定义这些公用的信息。

c语言预处理命令之条件编译(ifdefelseendifif等)

c语言预处理命令之条件编译(ifdefelseendifif等)

C语言预处理命令之条件编译(#ifdef,#else,#endif,#if等)预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。

可见预处理过程先于编译器对源代码进行处理。

在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。

要完成这些工作,就需要使用预处理程序。

尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。

预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。

预处理过程还会删除程序中的注释和多余的空白字符。

预处理指令是以#号开头的代码行。

#号必须是该行除了任何空白字符外的第一个字符。

#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。

整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

下面是部分预处理指令:指令用途#空指令,无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……#else条件编译块#error停止编译并显示错误信息一、文件包含#include预处理指令的作用是在指令处展开被包含的文件。

包含可以是多重的,也就是说一个被包含的文件中还可以包含其他文件。

标准C编译器至少支持八重嵌套包含。

预处理过程不检查在转换单元中是否已经包含了某个文件并阻止对它的多次包含。

这样就可以在多次包含同一个头文件时,通过给定编译时的条件来达到不同的效果。

例如:#defineAAA#include"t.c"#undefAAA#include"t.c"为了避免那些只能包含一次的头文件被多次包含,可以在头文件中用编译时条件来进行控制。

C语言中的三种预处理功能

C语言中的三种预处理功能

C语言中的三种预处理功能C语言中的三种预处理功能导语:预处理指令是以#号开头的代码行。

#号必须是该行除了任何空白字符外的第一个字符。

#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。

整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。

下面是C语言三种预处理功能,欢迎阅读:指令用途# 空指令,无任何效果#include 包含一个源代码文件#define 定义宏#undef 取消已定义的宏#if 如果给定条件为真,则编译下面代码#ifdef 如果宏已经定义,则编译下面代码#ifndef 如果宏没有定义,则编译下面代码#elif 如果前#if条件不为真,当前条件为真,则编译下面代码,其实就是else if的简写#endif 结束一个#if……#else条件编译块#error 停止编译并显示错误信息特殊符号预编译程序可以识别一些特殊的符号。

预编译程序对于在源程序中出现的这些串将用合适的值进行替换。

注意,是双下划线,而不是单下划线。

FILE 包含当前程序文件名的字符串LINE 表示当前行号的整数DATE 包含当前日期的字符串STDC 如果编译器遵循ANSI C标准,它就是个非零值TIME 包含当前时间的字符串//例#includeint main(){printf("Hello World! ");printf("%s ",__FILE__);printf("%d ",__LINE__);return 0;}1. 宏定义不带参数宏定义又称为宏代换、宏替换,简称“宏”。

预处理(预编译)工作也叫做宏展开:将宏名替换为字符串,即在对相关命令或语句的含义和功能作具体分析之前就要换。

格式:#define 标识符字符串其中标识符就是所谓的符号常量,也称为“宏名”。

例:#define Pi 3.1415926//把程序中出现的Pi全部换成3.1415926 说明:(1)宏名一般用大写;(2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。

C语言程序设计教程CJ_04预处理命令_潭浩强第3版

C语言程序设计教程CJ_04预处理命令_潭浩强第3版

Page 6
辽宁师范大学
蔡静
带参宏替换 函数调用 编译时替换, 运行时调用, 编译时替换 不占用内存 运行时调用 占用内存 只替换不计算 计算 替换使程序代码加长 不加长 存在数据类型问题 不存在数据类型问题
Page 7
辽宁师范大学
蔡静
9.2 “文件包含 处理 文件包含”处理 文件包含
通过预处理命令#include把另一个文件的全部内容包含到本 文件中。 格式1: #include <文件名 文件名> 文件名 只按系统指定的标准方式(从编译系统所在子目录中)检索 文件目录。 格式 2: #include “文件名” 文件名” 文件名 系统首先在当前源文件所在目录中寻找该文件,若找不到, 再按系统指定的标准方式检索其他文件目录。 例:9.6
Page 9
辽宁师范大学
蔡静
Thanks
Page 8
辽宁师范大学
蔡静
9.3 条件编译
指定满足某条件才能对指定语句进行编译,称为条件编译。 几种形式: 程序段2】 程序段 】 #endif
#ifndef 标识符 程序段1 程序段 【#else 程序段2】 程序段 】 #endif
#if 表达式 程序段1 程序段 【#else 程序段2】 程序段 】 #endif
Page 5
辽宁师范大学
蔡静
二、带参数的宏替换/宏定义 带参数的宏替换 宏定义
格式: #define 宏名 形参表 宏名(形参表 形参表) 例:#define S(M, N) M*N
字符串
说明: 带参数的宏定义不是进行简单字符串替换,还要进行参数 替换。形参表列中的参数出现在字符串中。 宏展开只是将程序语句中宏名后括号内的实参代替 #define命令中的形参,并不计算。 宏名与其后括号间不能有空格。 例9.3-9.5:

c语言编译预处理及位运算习题答案

c语言编译预处理及位运算习题答案

编译预处理习题单项选择题1.在宏定义#define A 3.897678 中,宏名A代替一个( )。

A) 单精度数 B ) 双精度数 C ) 常量D) 字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理( )。

A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是( )。

A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A) #define 和printf 都是C语句 B ) #define 是C语句,而printf 不是C) printf 是C语句,但#define 不是D) #define 和printf 都不是C语句6.#define A 3.897678 #include <stdio.h>main(){ printf( "A=%f ,A);}程序运行结果为( )。

A) 3.897678=3.897678 B ) 3.897678=A C) A=3.897678 D ) 无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是( )。

A) x=65,y=65 B) x=21,y=65 C ) x=65,y=21 D ) x=21,y=218.有以下程序# define f(x) (x*x) main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2);printf("%d, %d\n”,i1,i2); }程序运行后的输出结果是A) 64, 28 B) 4, 4 C) 4, 3 D) 64, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf( "%d n" , M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf( "%d n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf( "%d n" ,i);}该程序中的for循环执行的次数是A) 5 B) 6 C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是数据,以―的形式参与运算。

C语言习题七编译预处理

C语言习题七编译预处理

习题七编译预处理1.有一个名为init.txt的文件,内容如下:#define HDY(A,B) A/B#define PRINT(Y) printf("y=%d\n",Y)有以下程序#include "init.txt"main(){ int a=1,b=2,c=3,d=4,k;k=HDY(a+c,b+d);PRINT(k);}下面针对该程序的叙述正确的是______。

A、编译出错B、运行出错C、运行结果为 y=0D、运行结果为 y=6解析:本题考查的是带参数的宏定义。

宏替换后,表达式k=HDY(a+c,b+d)即变为k=a+c/b+d=1+3/2+4=6。

故本题答案选D。

2.有以下程序#include <stdio.h>#define N 5#define M N+1#define f(x) (x*M)main(){ int i1,i2;i1=f(2);i2=f(1+1);printf ("%d %d\n",i1,i2);}程序的运行结果是______。

A、12 12B、11 7C、11 11D、12 7解析:本题考查的是宏定义。

在编译时预处理程序用"替换文本"来替换宏,并用对应的实参来替换"替换文本"。

此题中的替换文本分别为:N+1、(x*M)。

引用带参的宏名i1=f(2),在经过宏替换后i1=2*N+1=2*5+1=11(注:因为在对宏 M 的替换中N+1没有加括号,所以对宏f(x)的替换文本展开后就变为:x*N+1形式);与上相同 i2在引用带参的宏名并替换展开后变为:i2=1+1*N+1=1+1*5+1=7。

故本题答案为B。

3.以下叙述中错误的是______。

A、C程序中的#include和#define行均不是C语句B、除逗号运算符外,赋值运算符的优先级最低C、C程序中,j++;是赋值语句D、C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算解析:本题考查的是C语言运算符。

C语言程序设计-谭浩强-第9章预处理命令

C语言程序设计-谭浩强-第9章预处理命令
例 #define S (r) PI*r*r 例 #define POWER(x) x*x 相当于定义了不带参宏S,代表字符串“(r) PI*r*r” x=4; y=6; z=POWER(x+y); 宏展开:z=x+y*x+y; 一般写成: #define POWER(x) ((x)*(x)) 宏展开: z=((x+y)*(x+y));
17/14
§9.1 宏定义 宏体可缺省,表示宏名
不带参数宏定义
定义过或取消宏体
一般形式: 宏体] 一般形式: #define 宏名 [宏体 宏体 功能:用指定标识符 宏名)代替字符序列 宏体) 用指定标识符(宏名 代替字符序列(宏体 功能 用指定标识符 宏名 代替字符序列 宏体
如 #define 定义位置:任意YES 1 一般在函数外面) 定义位置 任意(一般在函数外面 任意 一般在函数外面 #define 例 NO 0 YES #define 1 作用域:从定义命令到文件结束 作用域 从定义命令到文件结束 main() #define PI 3.1415926 #define OUT printf(“Hello,World”); { …….. YES原作用域 #undef可终止宏名作用域 可 } 格式: 格式: #undef 宏名 #undef YES 宏展开:预编译时,用宏体替换宏名 用宏体替换宏名---不作语法检查 宏展开:预编译时 用宏体替换宏名 不作语法检查 #define YES 0 max() 引号中的内容与宏名相同也不置换 YES新作用域 {…….. if(x==YES)WIDTH 80 如 例 #define WIDTH 80 printf(“correct!\n”); 例 #define 宏定义可嵌套, 宏定义可嵌套,不能递归 } else if (x==NO)( WIDTH+40 ) printf(“error!\n”); #define #define LENGTH 3.14159 例 #define PI LENGTH WIDTH+40 宏定义中使用必要的括号() 宏定义中使用必要的括号() 展开后: if(x==1) 展开后var=LENGTH*2; : var=LENGTH*2;printf(“correct!\n”); (×) printf(“2*PI=%f\n”,PI*2); 例 #define MAX MAX+10 × else 宏展开: 宏展开: :printf(“2*PI=%f\n”,3.14159*2); 宏展开 宏展开:var= ((x==0) ) * 2;printf(“error!\n”); 宏展开: if 80+40 宏展开 :var= 80+40*2;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六章预处理命令6.1 选择题1.下面叙述中正确的是()。

A. 带参数的宏定义中参数是没有类型的B. 宏展开将占用程序的运行时间C. 宏定义命令是C语言中的一种特殊语句D. 使用#include命令包含的头文件必须以“.h”为后缀2.下面叙述中正确的是()。

A. 宏定义是C语句,所以要在行末加分号B. 可以使用#undef命令来终止宏定义的作用域C. 在进行宏定义时,宏定义不能层层嵌套D. 对程序中用双引号括起来的字符串内的字符,与宏名相同的要进行置换3.在“文件包含”预处理语句中,当#include后面的文件名用双引号括起时,寻找被包含文件的方式为()。

A. 直接按系统设定的标准方式搜索目录B.先在源程序所在目录搜索,若找不到,再按系统设定的标准方式搜索C. 仅仅搜索源程序所在目录D. 仅仅搜索当前目录4.下面叙述中不正确的是()。

A. 函数调用时,先求出实参表达式,然后带入形参。

而使用带参的宏只是进行简单的字符替换B. 函数调用是在程序运行时处理的,分配临时的内存单元。

而宏展开则是在编译时进行的,在展开时也要分配内存单元,进行值传递C. 对于函数中的实参和形参都要定义类型,二者的类型要求一致,而宏不存在类型问题,宏没有类型D. 调用函数只可得到一个返回值,而用宏可以设法得到几个结果5.下面叙述中不正确的是()。

A. 使用宏的次数较多时,宏展开后源程序长度增长。

而函数调用不会使源程序变长B. 函数调用是在程序运行时处理的,分配临时的内存单元。

而宏展开则是在编译时进行的,在展开时不分配内存单元,不进行值传递C. 宏替换占用编译时间D.函数调用占用编译时间6.下面叙述中正确的是( )。

A. 可以把define和if定义为用户标识符B.可以把define定义为用户标识符,但不能把if定义为用户标识符C. 可以把if定义为用户标识符,但不能把define定义为用户标识符D. define和if都不能定义为用户标识符7.下面叙述中正确的是()。

A.#define和printf都是C语句B.#define是C语句,而printf不是C.printf是C语句,但#define不是D.#define和printf都不是C语句8.以下叙述中正确的是()。

A. 用#include包含的头文件的后缀不可以是“.a”B. 若一些源程序中包含某个头文件;当该头文件有错时,只需对该头文件进行修改,包含此头文件所有源程序不必重新进行编译C. 宏命令行可以看作是一行C语句D. C编译中的预处理是在编译之前进行的9.下列程序运行结果为()。

#define R 3.0#define PI 3.1415926#define L 2*PI*R#define S PI*R*Rmain(){printf("L=%f S=%f\n",L,S);}A. L=18.849556 S=28.274333B. 18.849556=18.849556 28.274333=28.274333C. L=18.849556 28.274333=28.274333D. 18.849556=18.849556 S=28.27433310.以下程序执行的输出结果是( )。

#define MIN(x,y) (x)<(y)?(x):(y)main(){int i,j,k;i=10;j=15;k=10*MIN(i,j);printf("%d\n",k);}A.15B.100C.10D.15011.下列程序执行后的输出结果是( )。

#define MA(x) x*(x-1)main(){int a=1,b=2;printf("%d \n",MA(1+a+b));}A. 6B. 8C. 10D. 1212.以下程序的输出结果是( )。

#define M(x,y,z) x*y+zmain(){int a=1,b=2, c=3;printf("%d\n", M(a+b,b+c, c+a));}A. 19B. 17C. 15D. 12 13.程序中头文件typel.h 的内容是( )。

#define N 5#define M1 N*3程序如下:#include "type1.h"#define M2 N*2main(){int i;i=M1+M2;printf("%d\n",i);}程序编译后运行的输出结果是()。

A. 10B. 20C. 25D. 30 14.请读程序:#include<stdio.h>#define SUB(X,Y) (X)*Ymain(){int a=3, b=4;printf("%d", SUB(a++, b++));}上面程序的输出结果是()。

A. 12B. 15C. 16D. 20 15.执行下面的程序后,a的值是( )。

#define SQR(X) X*Xmain( ){int a=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}A. 10B. 1C. 9D. 0 16.设有以下宏定义#define N 3#define Y(n) ((N+1)*n)则执行语句:z=2 * (N+Y(5+1));后,z的值为( )。

A. 出错B. 42C. 48D. 54 17.以下程序的输出结果是( )。

#define f(x) x*xmain( ){int a=6,b=2,c;c=f(a) / f(b);printf("%d\n",c);}A. 9B. 6C. 36D. 1818.有如下程序#define N 2#define M N+1#define NUM 2*M+1main(){int i;for(i=1;i<=NUM;i++)printf("%d\n",i);}该程序中的for循环执行的次数是( )。

A. 5B. 6C. 7D. 819.执行如下程序后,输出结果为()。

#include <stdio.h>#define N 4+1#define M N*2+N#define RE 5*M+M*Nmain(){printf("%d",RE/2);}A.150B.100C. 41D.以上结果都不正确20.以下程序的输出结果是()。

#define LETTER 0main(){char str[20]= "C Language",c;int i;i=0;while((c=str[i])!=’\0’){i++;#if LETTERif(c>=’a’&&c<=’z’) c=c-32;#elseif(c>=’A’&&c<=’Z’) c=c+32;#endifprintf("%c",c);}}A. C LanguageB. c languageC. C LANGUAGED. c LANGUAGE 6.2 填空题1.以下程序的输出结果是________。

#define MAX(x,y) (x)>(y)?(x):(y)main(){int a=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf("%d\n",t);}2.下面程序的运行结果是________。

#define N 10#define s(x) x*x#define f(x) (x*x)main(){int i1,i2;i1=1000/s(N);i2=1000/f(N);printf("%d,%d\n",i1,i2);}3.设有如下宏定义#define MYSWAP(z,x,y) {z=x; x=y; y=z;}以下程序段通过宏调用实现变量a、b内容交换,请填空。

float a=5,b=16,c;MYSWAP( 【1】 ,a,b);4.计算圆的周长、面积和球的体积【1】main(){float l,r,s,v;printf("input a radus: ");scanf("%f ", 【2】 );l=2.0*PI*r;s=PI*r*r;v=4.0/3*( 【3】 );printf("l=%.4f\n s=%.4f\n v=%.4f\n",l,s,v);}5.计算圆的周长、面积和球的体积#define PI 3.1415926#define 【1】 L=2*PI*R; 【2】 ;main(){float r,l,s,v;printf("input a radus: ");scanf("%f",&r);CIRCLE(r,l,s,v);printf("r=%.2f\n l=%.2f\n s=%.2f\n v=%.2f\n", 【3】 );}6.3 答案及部分解析一.选择题答案1.A2.B3.B4.B5.D6.B7.D 8.D 9.A 10.A 11.B 12.D13.C 14.A 15.B 16.C 17.C 18.B19.C 20.B1. 解析:关于宏的习题,我们要牢记一点:宏展开只是简单的字符串替换。

宏名无类型,宏的参数也没有类型,所以选项A)是正确的。

宏展开是在正式编译以前进行的,不会占用程序的运行时间,而会占用编译时间,所以选项B)错误。

规定所有的编译预处理命令都不是C语言中的语句,因而,编译预处理命令不以分号作为结束符,所以选项C)错误。

头文件习惯上以“.h”为后缀,但它只是习惯而不是规定。

所以选项D)错误。

9. 解析:注意双引号中的宏名不被展开,所以输出结果为L=18.849556 S=28.274333,而不是18.849556=18.849556 28.274333=28.274333。

10.解析:宏展开就是简单的字符串替换。

语句k=10*MIN(i,j);经过宏展开为k=10*(i)<(j)?(i):(j);。

由于*号的优先级要高于<号的优先级,因此要先进行10*(i)的运算;把值带入宏展开式为k=10*10<15?10:15;,条件表达式的值为15。

所以选项A)是正确的。

20.解析:条件编译的命令总共有三种:一种是#ifdef 标识符…#else…#endif,作用是当标识符被定义过,就编译前一段程序,否则编译后一段程序;第二种是#ifdef 标识符…#else…#endif,作用是当标识符未被定义过,就编译前一段程序,否则编译后一段程序;第三种是#if 表达式…#else…#endif,作用是表达式的值为“真”时编译前一段程序,否则编译后一段程序。

相关文档
最新文档