使用宏进行类型泛型编程:确定类型的技巧?

R..*_*R.. 8 c generics macros c-preprocessor

可以将某些类型的类型泛型函数作为C中的宏来执行,例如:

#define SQRT(x) (sizeof(x) == sizeof(float) ? sqrtf((x)) : \
                 sizeof(x) == sizeof(double) ? sqrt((x)) : \
                 sqrtl((x)) )
Run Code Online (Sandbox Code Playgroud)

只要x是浮点类型,这(大多数)就可以正常工作.

但是,如果我想要一个可以采用整数类型或指针类型的类型通用宏,它可能具有相同的大小.有没有一种聪明的方法来测试宏参数是整数还是指针?整数与浮点类型怎么样?

Kar*_*tel 2

不。宏不知道什么是类型。他们执行 #define 的字面复制和粘贴。这里根本不存在类型安全。

从任何意义上来说,C 都不是强类型语言。如果您想要一定程度的类型安全,请使用 C++,您可以通过模板和函数重载完成一些工作。