返回信息流#include "stdafx.h"
#include <stdio.h>
#define FUN(A) A++;\
A *=10;
int fun(int x)
{
x++;
x *=10;
return x;
}
int main(int argc, char* argv[])
{
int a = 10;
int b = 20;
int c = 30;
if(a>100)
FUN(a); //这个不管if条件,都会执行,而且结果 a = 100
if(b>10)
FUN(b); //这个也会用到宏,但是结果就是 b = 210
if(c>1000)
fun(c); //如果换成函数,这个就不会执行,c = 30,反之换成宏,c=300
printf("a=%d,b=%d,c=%d \r\n",a,b,c);
return 0;
}
觉得自己绕进去了,不知道宏和函数的执行条件了,就算总是执行宏,那为啥a = 100,
而不像b = 210呢,有什么不一样嘛
另外如果上面的宏语句加上大括号后,if才起作用
大侠们告诉下
这是一条镜像帖。来源:北邮人论坛 / cpp / #14456同步于 2008/10/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于宏 和 函数执行时的迷惑
LA
2008/10/22镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
if后面加
{
}
if...
{FUN(A)
}
【 在 LA (LA) 的大作中提到: 】
: #include "stdafx.h"
: #include <stdio.h>
: #define FUN(A) A++;\
: ...................
你这个宏定义了两条语句,if只对最近的语句有效
【 在 LA (LA) 的大作中提到: 】
: #include "stdafx.h"
: #include <stdio.h>
: #define FUN(A) A++;\
: ...................
呃,re说的就是在VC下的……
不是windows的命令行不接受以/开始的参数。
【 在 LA 的大作中提到: 】
: 这个具体怎么操作,在VC++可以嘛
gcc -E
【 在 LA (LA) 的大作中提到: 】
: #include "stdafx.h"
: #include <stdio.h>
: #define FUN(A) A++;\
: ...................
【 在 huyuanmeix 的大作中提到: 】
: 在定义宏的时候加上{ },免得以后每次用的时候加。
如果是2个语句,就加{};咱们上课的时候说了嘛,对于表达式外面要加()
因为宏定义只是简单的替代,至于替代之后的顺序问题,编译时是不管的