是否可以对 #define 宏的参数进行类型检查?例如:
typedef enum
{
REG16_A,
REG16_B,
REG16_C
}REG16;
#define read_16(reg16) read_register_16u(reg16); \
assert(typeof(reg16)==typeof(REG16));
上面的代码似乎不起作用。我究竟做错了什么?
顺便说一句,我正在使用 gcc,并且我可以保证在这个项目中我将始终使用 gcc。该代码不需要是可移植的。
gcc 支持 typeof
例如取自 Linux 内核的类型安全 min 宏
#define min(x,y) ({ \
typeof(x) _x = (x); \
typeof(y) _y = (y); \
(void) (&_x == &_y); \
_x < _y ? _x : _y; })
但它不允许您比较两种类型。请注意,指针比较会生成警告 - 您可以像这样进行类型检查(也来自 Linux 内核)
#define typecheck(type,x) \
({ type __dummy; \
typeof(x) __dummy2; \
(void)(&__dummy == &__dummy2); \
1; \
})
想必您可以做类似的事情 - 即比较指针与参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)