单选题
1、〖第15题〗692) 以下叙述中正确的是()。
A
在程序的一行上可以出现多个有效的预处理命令行
B
使用带参的宏时,参数的类型应与宏定义时的一致
C
宏替换不占用运行时间,只占编译时间
D
在以下定义中 C R 是称为”宏名”的标识符 #define C R 045
答案解析
正确答案:C
解析:
这是一道关于 C 语言预处理指令(Preprocessor Directives)和宏定义(Macro Definition)的基础概念题。我们需要逐一分析每个选项的正确性。
**选项分析:**
* **A. 在程序的一行上可以出现多个有效的预处理命令行**
* **错误**。在 C 语言中,预处理指令是以 `#` 开头的,并且通常要求**一行只能有一个预处理指令**。虽然某些编译器可能支持通过反斜杠 `\` 将一条长指令分行写,或者在极少数非标准扩展中允许特殊情况,但在标准 C 语言规范中,一个预处理指令必须独占一行(或者说,换行符标志着预处理指令的结束)。因此,不能在一行内写两个独立的 `#define` 或 `#include` 等指令。
* **B. 使用带参的宏时,参数的类型应与宏定义时的一致**
* **错误**。宏替换是**纯文本替换**,发生在编译之前的预处理阶段。预处理器并不理解数据类型(如 `int`, `float`, `char` 等),它只是机械地将宏调用中的实参文本替换到宏定义的形参位置。因此,宏没有类型检查机制,参数的类型不需要、也无法在宏定义时指定或保持一致。类型检查是在后续的编译阶段由编译器对替换后的代码进行的。
* **C. 宏替换不占用运行时间,只占编译时间**
* **正确**。宏替换是由**预处理器**在编译过程的早期阶段完成的。当源代码被编译器处理之前,所有的宏调用已经被替换成了具体的代码文本。因此,在程序最终生成可执行文件并运行时,不存在“宏替换”这个动作,自然不占用运行时间。它消耗的是编译过程中的时间(预处理阶段)。
* **D. 在以下定义中 C R 是称为”宏名”的标识符 #define C R 045**
* **错误**。在 `#define` 指令中,语法格式通常为 `#define 宏名 替换文本`。宏名必须是一个合法的标识符,且**中间不能有空格**。
* 对于 `#define C R 045`:
* 预处理器会将 `C` 识别为宏名。
* `R 045` 会被识别为替换文本(即每当代码中出现 `C` 时,会被替换为 `R 045`)。
* 因此,宏名是 `C`,而不是 `C R`。如果想定义名为 `CR` 的宏,应该写成 `#define CR 045`(中间无空格)。
**结论:**
综上所述,只有选项 C 的叙述是正确的。
**正确答案:C**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第284题 (1.0分) 题号:158 在C语言中,为了结束由while语句构成的循环,while后一对圆括号 中表达式的值应该为()。
单选题
1、第283题 (1.0分) 题号:495 下列字符序列中,是C语言保留字的是()。
单选题
1、第282题 (1.0分) 题号:575 若有条件表达式 (exp)?a++:b--,则以下表达式中能完全等价于 表达式(exp)的是()。
单选题
1、第281题 (1.0分) 题号:551 应用缓冲文件系统对文件进行读写操作,打开文件的函数名为()。
单选题
1、第280题 (1.0分) 题号:562 下列叙述中正确的是()。
单选题
1、第279题 (1.0分) 题号:560 能将高级语言编写的源程序转换为目标程序的是()。
单选题
1、第278题 (1.0分) 题号:511 求平方根函数的函数名为()。
单选题
1、第277题 (1.0分) 题号:618 C语言中用于结构化程序设计的三种基本结构是()。
单选题
1、第276题 (1.0分) 题号:706 若有说明:int *p,m=5,n;以下正确的程序段是()。
单选题
1、第275题 (1.0分) 题号:102 以下数据中,不正确的数值或字符常量是()。
