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是浮点类型,这(大多数)就可以正常工作.
但是,如果我想要一个可以采用整数类型或指针类型的类型通用宏,它可能具有相同的大小.有没有一种聪明的方法来测试宏参数是整数还是指针?整数与浮点类型怎么样?
不。宏不知道什么是类型。他们执行 #define 的字面复制和粘贴。这里根本不存在类型安全。
从任何意义上来说,C 都不是强类型语言。如果您想要一定程度的类型安全,请使用 C++,您可以通过模板和函数重载完成一些工作。