使用 gcc/tcc/clang 对 C 语言 (C11) 的扩展,是否可以检测宏参数是否具有指针类型?
详细信息:我正在使用一个应该采用单个间接指针的宏,但很容易将指针传递给该指针,因为这是相应的“构造函数”宏所采用的,但这样做会出错,所以我目前正在使用类似的东西:
#define ISPTR(X) (sizeof(X)==sizeof(void*)&&_Alignof(X)==_Alignof(void*)) /*inaccurate*/
#define TAKE_SINGLY_INDIRECT(P) do{ _Static_assert(!ISPTR(*(P)), "pass a singly indirect pointer"); /*...*/ }while(0)
保护自己免受自己的伤害。有没有更好的实施方式ISPTR()
?