一段宏代码什么意思?

时间:2021-04-05 19:45:39
#define EASYSIZE(id,l,t,r,b,o) \
static int id##_es_l, id##_es_t, id##_es_r, id##_es_b;\
...

那些##_es_l什么意思?

11 个解决方案

#1


##在宏中表示连字符

#2


##是把后面的连接起来形成完整的标志符
比如
#define jing( A ) int A##bc;

jing( a )
就相当于
int abc;

#3


加固定的后缀

#4


#define EASYSIZE(id,l,t,r,b,o) \
static int id##_es_l, id##_es_t, id##_es_r, id##_es_b;\

宏定义的基本形式 \是换行的 ##是连接的

#5


#define EASYSIZE(id,l,t,r,b,o) \
static int id##_es_l, id##_es_t, id##_es_r, id##_es_b;\

\  表示续行服,表示代码一行写不下,接下来再写
## 用来告诉编译器将两个字符串连在一起

在你的程序中可以这样使用:


int main()
{
.................

EASYSIZE(xulei,x,u,l,e,i)   //这里没有分号

xulei_es_b = 12; //xulei就表示你使用的id,使用这个宏你定义了
                          //xulei_es_l,xulei_es_t,xulei_es_r,xulei_es_b四个静态变量

..................... 
}

#6


谢谢大家啦,有关于宏的详细的介绍吗?最好中文的

还有 #define BEGIN_EASYSIZE_MAP(class) \
里面的class和关键字重了,这样用也行?还是这个class在宏定义里有特殊的意思?

#7


宏的优先级高,处理宏的时候,还轮不到考虑它是不是关键字什么的。
虽然和关键字重名严重影响了对宏不熟悉的人进行阅读。

#8


##是把后面的连接起来形成完整的标志符
比如
#define jing( A ) int A##bc;

jing( a )
就相当于
int abc;

--
zhengjie

#9


EASYSIZE(xulei,x,u,l,e,i)   //这里没有分号

xulei_es_b = 12; //xulei就表示你使用的id,使用这个宏你定义了
                          //xulei_es_l,xulei_es_t,xulei_es_r,xulei_es_b四个静态变量

------------------------------------------------------------------------------------
搞不清那(xulei,x,u,l,e,i)  中的5个参数x,u,l,e,i是用来干什么的啊??
看了 #define EASYSIZE(id,l,t,r,b,o) \
static int id##_es_l, id##_es_t, id##_es_r, id##_es_b;\
我以为es_后面跟着的是l,t,r,b 4个参数,最后一个o又是个什么东东?

#10


没人解释?

#11


o ,看定义是设置是不是水平还是垂直居中的选项...看这个宏的定义,对应的是这个语句...
if ( o & ES_HCENTER ) id##_es_l = rect.Width() / 2

#1


##在宏中表示连字符

#2


##是把后面的连接起来形成完整的标志符
比如
#define jing( A ) int A##bc;

jing( a )
就相当于
int abc;

#3


加固定的后缀

#4


#define EASYSIZE(id,l,t,r,b,o) \
static int id##_es_l, id##_es_t, id##_es_r, id##_es_b;\

宏定义的基本形式 \是换行的 ##是连接的

#5


#define EASYSIZE(id,l,t,r,b,o) \
static int id##_es_l, id##_es_t, id##_es_r, id##_es_b;\

\  表示续行服,表示代码一行写不下,接下来再写
## 用来告诉编译器将两个字符串连在一起

在你的程序中可以这样使用:


int main()
{
.................

EASYSIZE(xulei,x,u,l,e,i)   //这里没有分号

xulei_es_b = 12; //xulei就表示你使用的id,使用这个宏你定义了
                          //xulei_es_l,xulei_es_t,xulei_es_r,xulei_es_b四个静态变量

..................... 
}

#6


谢谢大家啦,有关于宏的详细的介绍吗?最好中文的

还有 #define BEGIN_EASYSIZE_MAP(class) \
里面的class和关键字重了,这样用也行?还是这个class在宏定义里有特殊的意思?

#7


宏的优先级高,处理宏的时候,还轮不到考虑它是不是关键字什么的。
虽然和关键字重名严重影响了对宏不熟悉的人进行阅读。

#8


##是把后面的连接起来形成完整的标志符
比如
#define jing( A ) int A##bc;

jing( a )
就相当于
int abc;

--
zhengjie

#9


EASYSIZE(xulei,x,u,l,e,i)   //这里没有分号

xulei_es_b = 12; //xulei就表示你使用的id,使用这个宏你定义了
                          //xulei_es_l,xulei_es_t,xulei_es_r,xulei_es_b四个静态变量

------------------------------------------------------------------------------------
搞不清那(xulei,x,u,l,e,i)  中的5个参数x,u,l,e,i是用来干什么的啊??
看了 #define EASYSIZE(id,l,t,r,b,o) \
static int id##_es_l, id##_es_t, id##_es_r, id##_es_b;\
我以为es_后面跟着的是l,t,r,b 4个参数,最后一个o又是个什么东东?

#10


没人解释?

#11


o ,看定义是设置是不是水平还是垂直居中的选项...看这个宏的定义,对应的是这个语句...
if ( o & ES_HCENTER ) id##_es_l = rect.Width() / 2