gpt4 book ai didi

检查宏参数是否为指针

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

是否有一些“不错”的方法来检查传递给宏的变量是否是指针?例如

#define IS_PTR(x) something
int a;
#if IS_PTR(a)
printf("a pointer we have\n");
#else
printf("not a pointer we have\n");
#endif

想法是这不是在运行时完成,而是在编译时完成,如:我们根据变量是否为指针获得不同的代码。所以我希望 IS_PTR() 以某种方式评估某种常量表达式。我是否以错误的方式处理这个想法?

最佳答案

正如您在问题中暗示的那样,通过 #if 中的预处理器肯定无法观察到它。预处理器对类型一无所知,只知道从它们构造的标记和表达式。

C11 有一个新功能,可以让您观察特定的指针类型,但不是一般的“指针性”。例如你可以做点什么

#define IS_TOTOP(X) _Generic((X), default: 0, struct toto*: 1)

或者如果您希望宏也适用于数组

#define IS_TOTOPA(X) _Generic((X)+0, default: 0, struct toto*: 1)

已经有一些编译器实现了这个,即 clang,对于 gcc 和其他你已经可以用一些内置函数模拟这个特性,参见 P99 .

关于检查宏参数是否为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255148/

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