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

C语言的编译系统对宏命令的处理是()A。在程序运行时进行的B。在对源程序中其他成分正式编译之前进行的C。在程序连续时进行的D。和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
展开
 我来答
三尺长锋退千军
推荐于2017-09-07 · TA获得超过173个赞
知道答主
回答量:44
采纳率:0%
帮助的人:14万
展开全部
前言:宏实质就是编译器在对代码进行编译之前进行的一个“查找替换”工作,就跟你在处理文档时用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次 */
gyhmichael
2008-10-30 · TA获得超过257个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:120万
展开全部
7次

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

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

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

#define M N+1 等于 M === 2+1 ===3 后面的以此类推
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2008-10-30 · TA获得超过5045个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2481万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
The_facE
2008-10-30 · TA获得超过1053个赞
知道小有建树答主
回答量:1087
采纳率:0%
帮助的人:942万
展开全部
什么7次

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

宏定义属于预处理部分,是在编译之前进行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式