关于C语言的宏和枚举类型问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 21:34:17
#define gop(name,value) name=value<<4,
#define op(name,type,sizes)
enum {
F=FLOAT,
I=INT,
P=POINTER,
B=STRUCT,
T=BIT
};
enum {
gop(CNST,1)
op(CNST,F,fdx)
op(CNST,I,csilh)
gop(ARG,2)
op(ARG,B,-)
op(ARG,F,fdx)
op(ARG,I,ilh)
op(ARG,T,i)
LASTOP
}
请问这里op宏的宏体怎么没定义,在这里有是什么意义。这个第二个enum有几个枚举值?而且找不到fdx csilh ilh i的定义,以上代码摘录程序的一部分,绝对没有错误。

op没有宏体就没有宏体 在C语言中没有宏体也是很正常的 尤其在头文件中 像 #define __STDLIB 这样只要说明有就行了 而没有必要有具体的值
还有一种情况是为了代码的健壮性 和 可读性 像在 stdarg.h中 #define va_end(ap) 这也是没有宏体的
如果像你说的那样 op宏没有宏体 我想它就是起到说明该变量属于某种类型其大小为多少的作用

第二个枚举元素的个数就要看 LASTOP 是什么了 但是看它的样子应该也是一个宏