单选题
1、第99题 (1.0分) 题号:692 以下叙述中正确的是()。
A
在程序的一行上可以出现多个有效的预处理命令行
B
使用带参的宏时,参数的类型应与宏定义时的一致
C
宏替换不占用运行时间,只占编译时间
D
在以下定义中 C R 是称为”宏名”的标识符 #define C R 045
答案解析
正确答案:C
解析:
**正确答案:C**
**解析:**
本题考查 C 语言中预处理指令(特别是宏定义)的相关概念。我们逐一分析各个选项:
* **A 选项错误**:
在 C 语言中,预处理指令是以 `#` 开头的行。标准规定,一个预处理指令必须独占一行。虽然某些编译器可能允许使用反斜杠 `\` 进行换行续写,但在一行物理代码上直接书写多个独立的预处理命令(例如 `#define A 1 #define B 2`)是不合法的,会导致编译错误。
* **B 选项错误**:
宏定义是简单的文本替换,由预处理器在编译前处理。预处理器不进行类型检查。因此,使用带参宏时,参数的类型不需要与宏定义时“一致”(因为宏定义本身也不指定类型)。类型的匹配和检查是在宏替换后,由编译器对生成的代码进行检查时进行的。如果类型不匹配,可能会在编译阶段报错或产生警告,但这并非宏定义机制本身的约束。
* **C 选项正确**:
宏替换(Macro Expansion)是由**预处理器**在**编译阶段之前**完成的。预处理器将源代码中的宏调用替换为宏定义的主体内容。这个过程发生在程序运行之前,因此宏替换本身**不占用程序的运行时间**,只占用编译(更准确地说是预处理)时间。这是宏与函数调用的主要区别之一(函数调用发生在运行期,有压栈、跳转等开销)。
* **D 选项错误**:
在定义 `#define C R 045` 中,预处理器的规则是:`#define` 后的第一个标识符是宏名,其余部分(直到行尾)是替换列表。
因此,在这个定义中,**宏名是 `C`**,而替换文本是 `R 045`。这意味着当代码中出现 `C` 时,它会被替换为 `R 045`。`C R` 并不是一个整体的宏名,中间的空格分隔了宏名和替换体。
综上所述,只有 C 选项的叙述是正确的。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第160题 (1.0分) 题号:634 以下不正确的定义语句是()。
单选题
1、第159题 (1.0分) 题号:642 在C语言中,一维数组的定义方式为:类型说明符数组名()。
单选题
1、第158题 (1.0分) 题号:181 C语言中函数调用的方式有()。
单选题
1、第157题 (1.0分) 题号:717 fscanf函数的正确调用形式是()。
单选题
1、第156题 (1.0分) 题号:653 以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()。
单选题
1、第155题 (1.0分) 题号:604 下面不正确的字符串常量是()。
单选题
1、第154题 (1.0分) 题号:723 函数调用语句:fseek(fp,-20L,2);的含义是()。
单选题
1、第153题 (1.0分) 题号:683 在C语言中,要求运算数必须是整型或字符型的运算符是()。
单选题
1、第152题 (1.0分) 题号:698 整型变量x和y的值相等、且为非0值,则以下选项中,结果为零的 表达式是()。
单选题
1、第151题 (1.0分) 题号:695 以下叙述中不正确的是()。
