我想要一个宏,它可以决定给定的变量是否为指针?
我的要求如下:
#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 15:26:54
在引擎盖下,指针与32位或64位无符号整数相同。我不认为在C中有一种方法可以区分指针和基元类型。
发布于 2015-09-17 11:06:07
在C++中,您可以将其声明为返回false的模板,然后为class T指定该模板,以便is_ptr(const T* _)返回true。
C++11在<type_traits>中有is_pointer。
发布于 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
复制相似问题