c语言宏替换

有如下程序 #include<iostream.h> #define N2 #define M N+1 #define NUM2*M+1 void main() { int i; for(i=1;i<=NUM;i++) cout<<i;} 该程序中的for循环执行的次数是几次,我认为是6,答案是8,麻烦大家帮讲解一下

定义宏是,一般建议用括号括起来。我们来看两个例子:

例子一:

#define N m + 1

如果代码里面我们写 

N * N

想象看会变成什么

m + 1 * m + 1

也就是 1 + 2 * m 这可能不是你需要的。

例子二 : 如果我们用括号括起来

#define N ( m + 1 )

同样的

N * N

这时候会替换 成

( m + 1 ) * ( m + 1 )

这样的结果才是对的。

回过头来看看你的代码, 你 需要 把 宏 括起来

#include <iostream.h>
#define N (2)   // 这里括起来不括起来没区别;但 如果你写成 #define N 1 + 1 就可能造成区别的,所以一般宏定义建议加个括号。
#define M (N+1)
#define NUM (2 * M + 1)
int main() { 
    for(int i=1; i<=NUM; ++i) 
        cout << i;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-18
NUM宏展开即 2*2+1+1,所以NUM值为6追问

不是(2+1+1)*2+1/2?

第2个回答  2018-02-18
NUM=2*M+1
=追问

不是(2+1+1)*2+1/2吗,请问下怎么做的,不大会

追答

NUM=2*M+1
=2*N+1+1
=2*2+1+1
=6
6次

相似回答