gpt4 book ai didi

c - C 中的类型检查宏参数

转载 作者:太空狗 更新时间:2023-10-29 15:10:50 26 4
gpt4 key购买 nike

是否可以对#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 内核的类型安全最小宏

#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; \
})

大概您可以做类似的事情 - 即比较指向参数的指针。

关于c - C 中的类型检查宏参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4712720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com