gpt4 book ai didi

针对 C 中的多种类型进行编译时检查?

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:07 24 4
gpt4 key购买 nike

目前我有一个宏来检查一个值是一个类型。

#define CHECK_TYPE_INLINE(val, type) \
((void)(((type)0) != (0 ? (val) : ((type)0))))

在某些情况下,这对于能够对宏参数进行类型检查很有用。

但是如果我要检查多种类型呢?例如,检查它是 struct Foo * 还是 struct Bar *

例子,

static inline _insert_item(struct List *ls, void *item) { /* function body*/ }

/* type-checked wrapper */
#define insert_item(ls, item) \
(CHECK_TYPE_ANY(item, struct Foo *, struct Bar *), \
_insert_item(ls, item))

有什么好的方法吗?

最佳答案

因为它被标记为 C11,您可以通过 _Generic 关键字获得语言支持:

#define CHECK(x) _Generic((x),  \
int : 1, \
float : 2, \
default : 3)

其中 1、2 和 3 是当传递的参数是特定类型时应该发生的事情。

Link with some good examples .

关于针对 C 中的多种类型进行编译时检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25988363/

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