C 的define 用法,编译不过,找错误

来源:百度知道 编辑:UC知道 时间:2024/06/06 21:46:01
下面的,怎么错了?
-----------
#include "stdafx.h"

#define NULL 0

typedef struct st_tree{
int num;
st_tree* left_tp;
st_tree* righr_tp;
}st_tree_p;

#define MAKETREEP(p,n,l,r) \
if(1){ st_tree_p p;\
p.num = n;\
p.left_tp = l;\
p.righr_tp = r;}

#define MAKETREESTICK(TP,Pa,Pb) \
((pa.num >= pb.num)?MAKELR(TP,Pa,Pb):MAKELR(TP,Pb,Pa))

#define MAKELR(TP,pa, pb) \
if(1){TP.left_tp = &pa;TP.left_tp = &pb;}

int main(int argc, char* argv[])
{
MAKETREEP(p0,0,NULL,NULL);
MAKETREEP(p1,1,NULL,NULL);
MAKETREEP(p2,2,NULL,NULL);
MAKETREESTICK(p0,p1,p2);
return 0;
}
如果把 if(1)都去掉呢?
如下:

#define MAKETREEP(p,n,l,r) \
{ st_tree_p p;\
p.num = n;\
p.left_tp = l;\
p.righr_tp = r;}

#define MAKETREESTICK(TP,Pa,Pb) \
((pa.nu

这是最终能运行的结果

#define NULL 0

typedef struct st_tree{
int num;
st_tree* left_tp;
st_tree* righr_tp;
}st_tree_p;
#define MAKETREEP(p,n,l,r) \
st_tree_p p;\
p.num = n;\
p.left_tp = l;\
p.righr_tp = r;

#define MAKETREESTICK(TP,Pa,Pb) \
if (Pa.num >= Pb.num) MAKELR(TP,Pa,Pb) else MAKELR(TP,Pb,Pa)

#define MAKELR(TP,pa, pb) \
{TP.left_tp = &pa;TP.left_tp = &pb;}
int main(int argc, char* argv[])
{
MAKETREEP(p0,0,NULL,NULL);
MAKETREEP(p1,1,NULL,NULL);
MAKETREEP(p2,2,NULL,NULL);
MAKETREESTICK(p0,p1,p2);
return 0;
}

((pa.num >= pb.num)?MAKELR(TP,Pa,Pb):MAKELR(TP,Pb,Pa))
首先第一个pa和pb要大写

还有你的if(1){ st_tree_p p;\
是在if里面定义的局部变量,在if外是不能引用的

最后,
1>0?(if(1) cout<<1;):(if(1) cout<<0;);
类似的用法是不允许的