C语言的编译系统对宏命令的处理

C语言的编译系统对宏命令的处理是()
A。在程序运行时进行的
B。在对源程序中其他成分正式编译之前进行的
C。在程序连续时进行的
D。和C程序中的其他语句同时进行编译

这是什么意思?就以下面题为例,请说明一下。
#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.8

前言:宏实质就是编译器在对代码进行编译之前进行的一个“查找替换”工作,就跟你在处理文档时用WPS/WORD/记事本等进行“查找替换”操作一样。

C语言的编译系统对宏命令的处理是()
A。在程序运行时进行的
B。在对源程序中其他成分正式编译之前进行的
C。在程序连续时进行的
D。和C程序中的其他语句同时进行编译

答:选B。在对源程序中其他成分正式编译之前进行的

2,
#define N 2 /* 在预编译时将用下面代码中N替换成2 */
#define M N+1 /* 在预编译时将M替换成N+1(即2+1,N会再被替换成2)*/
#define NUM 2*M+1 /* 如上:在预编译时NUM替换成2*M+1,即2*N+1+1,即2*2+1+1*/
main()
{int i;
for(i=1;i<=NUM;i++)printf("%d\n",i);
/*
* 如上所述,上句展开为:for(i=1;i<=2*2+1+1;i++)printf("%d\n",i);
* 所以:循环将执行6次
*/
}

/* 切记注意:每一个宏百进行替换时只是替换“正文”中的内容,而不包括预编译语句的内容, 否则就会像不少人理解的那样,错误地认为第2个题中的循环将执行7次 */
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-30
7次

#define N 2 这是预编译指令,在程序运行之前就进行了编译

这句话就相当于替换的意思 用 N 代替 2

程序运行时只要见到 N 就把它当作 2 执行,就这么简单

#define M N+1 等于 M === 2+1 ===3 后面的以此类推
第2个回答  2008-10-30
C语言的编译系统对宏命令的处理是()
A。在程序运行时进行的
B。在对源程序中其他成分正式编译之前进行的
C。在程序连续时进行的
D。和C程序中的其他语句同时进行编译
这个选b .编译系统先要把宏替换掉,然后再继续其他编译过程

这是什么意思?就以下面题为例,请说明一下。
#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.8
这个选 c

M=N+1=3,NUM=2*M+1 = 7
第3个回答  2008-10-30
什么7次

明明是NUM->2*M+1
->2*N+1+1(注意,宏定义时没有括号,所以替换后仍然没有!)
最后就是2*2+1+1=6次!!

宏定义属于预处理部分,是在编译之前进行的。
相似回答