我想要一个宏,它可以决定给定的变量是否为指针?
我的要求如下:
#define IS_PTR(x) ?
#define MY_TEST(x) IS_PTR(x)?&(*x):x ===> 1 if ptr and 0 means ref.
void main()
{ int a;
int *b;
int *c = MY_TEST(*b) ====> I have to *b instead of b directly
====> after precompilation int *c = &b
int d = MY_TEST(a) ====> after precompilation int d = d
}发布于 2015-09-16 16:26:36
在C11中,您可以使用通用选择。然而,我真的不明白你想要做什么。
#include <stdio.h>
#define IS_PTR(x) _Generic((x), int *: 1, int: 0)
void main() {
int a;
int *b;
printf("IS_PTR(a) = %d\n", IS_PTR(a));
printf("IS_PTR(b) = %d\n", IS_PTR(b));
}下面的输出
IS_PTR(a) = 0
IS_PTR(b) = 1在我的系统上。
编辑:由于某些原因,人们对这个答案的评价很低。虽然这不能区分指针和非指针,但它确实适用于任意数量的类型。对于操作员或其他偶然遇到这个问题的人来说,这可能已经足够好了。
目前最顶层的答案声称指针只是“隐藏在引擎盖下”的整数。这取决于“引擎盖下”到底是什么意思,这并不完全正确。(最后,一切都是整数和浮点数...)
https://stackoverflow.com/questions/32602149
复制相似问题