C预处理题目

 1.若有宏定义:#define S(a,b) t=a;a=b;b=t 由于变量t没定义,所以此宏定义是错误的。✘

2.C语言中,编译预处理后,所有的符号常量名和宏名都用相应的字符串替换。✔

3.#define ADD(X,Y) X+Y 的效果完全等同于定义一个函数ADD(X,Y)。✘

因为还有括号

4.#define PI 3.1415926是一条C语句✘

是c预处理,预处理指令是在编译之前由预处理器处理的,它们不是真正的C语句,而是用来辅助编译过程的指令

5.宏定义不存在类型问题,宏名无类型,它的参数也无类型。

6.若程序中有宏定义行:
#define N 100
则以下叙述中正确的是(B

A.宏定义行中定义了标识符N的值为整数100

B.在编译程序对C源程序进行预处理时用100替换标识符N(记住)

C.上述宏定义行实现将100赋给标示符N

D.在运行时用100替换标识符N

7.C/C++语言的编译预处理以#开始,其中不包括(D )。

A.宏定义

B.条件编译

C.文件包含

D.全局变量声明

全局变量声明是通过直接在代码中声明变量来实现的,而不需要使用预处理指令。预处理指令主要用于宏定义、条件编译和文件包含等操作。

8.下列叙述中错误的是(D)。

A.计算机不能直接执行用C语言编写的源程序

B.C程序经C编译程序编译后, 生成扩展名为obj的文件是一个二进制文件

C.扩展名为obj的文件, 经连接程序生成扩展名为exe的文件是一个二进制文件

D.扩展名为obj和exe的二进制文件都可以直接运行

计算机是无法直接执行C语言源代码的,需要将源代码经过编译器编译生成可执行文件(如obj和exe文件),然后才能在计算机上运行。

9.下列叙述中错误的是(D)。

A.C语言源程序经编译后生成扩展名为obj的目标程序

B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件

C.用C语言编写的程序称为源程序, 它以ASCII 代码形式存放在一个文本文件中

D.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令

C语言中的非执行语句(如声明语句、定义语句等)不会被转换成二进制的机器指令,而是在编译阶段被处理并生成对应的符号表等信息。只有可执行语句(如赋值语句、条件语句等)才会被转换成二进制的机器指令。

10.Given the definitions:

#define type1 char *
typedef char *type2;
type1 s1, s2;
type2 s3, s4;

Among the followings, which group contains all the identifiers that are character pointers?(C

A.s1, s3

B.s1, s2, s3

C.s1, s3, s4

D.s1, s2, s3, s4

11.以下描述不正确的是(D )。

A.宏名无类型

B.宏替换不占用运行时间

C.宏名必须用大写字母表示

D.宏替换只是字符替换

12.以下正确的叙述是(A )。

A.宏替换不占用运行时间,只占用编译时间

B.在程序的一行中可以出现多个有效的预处理命令行

C.使用带参数宏定义时,参数的类型应与宏定义时一致

D.宏定义不能出现在函数内部(可以出现,但不常见

13.C语言的编译系统对宏命令的处理(B )。

A.在程序运行时进行的

B.在对源程序中其他语句正式编译之前进行的

C.在程序连接时进行的

D.和C程序中的其他语句同时进行编译的

14.在“文件包含”预处理语句的使用过程中,当#include后面的文件名用双引号括起来时,寻找被包含文件的方式是(B )。

A.直接按系统设定的标准方式搜索目录

B.先在源程序所在目录搜索,再按系统设定的标准方式搜索

C.仅仅搜索源程序所在目录

D.仅仅搜索当前目录

#include后面的文件名用双引号括起来时,寻找被包含文件的方式是首先在当前源文件所在的目录下查找,如果找不到,则在编译器的标准库路径下查找。这种方式称为"逐级查找"或"相对路径查找"。

另一种方式是使用尖括号<>括起文件名,这种方式只在编译器的标准库路径下查找,不会在当前源文件所在目录下查找。这种方式称为"直接查找"或"绝对路径查找"。

15. 下列程序的输出结果是:(C

#include<stdio.h>
#define MA(x,y)(x)*(y)
int main()
{
    int i = 2;
    i = 3/MA(i,i+2)+5;
    printf("%d\n",i);
    return 0;
}

A.5

B.8

C.9

D.11

宏定义MA(x,y)被展开为(x)*(y)。在表达式3/MA(i,i+2)+5中,根据宏定义展开,会变为3/(i)*(i+2)+5,即3/(2)*(2+2)+5,即3/2*4+5,最终计算结果为1*4+5=9

注意:一步一步的运算,要注意浮点的运算,是否会舍去小数位

16.有以下程序,程序运行后的输出结果是(D)。

#define P 3
#define F(int x){return (P*x*x);}

int main()
{     printf("%d\n",F(3+5));
      return 0;
}

A.192

B.29

C.25

D.编译出错

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值