c语言有办法判断(比较)变量类型吗
见gcc的一堆__builtin_ : Using the GNU Compiler Collection (GCC): Other Builtins
以及c11的_Generic C11 (C standard revision)
不过基本上都只能用在宏里面...
用__builtin__举个没有实际意义的例子#include \u0026lt;stdio.h\u0026gt;#include \u0026lt;stdlib.h\u0026gt;void swap_double(double* x, double* y);void swap_int(int* x, int* y);#define typecmp(X, Y) __builtin_types_compatible_p(typeof(X), Y)#define swap(x, y) \\ { \\ typeof(x) p_x = (x), p_y = (y); \\ if (typecmp(x, double*) \u0026amp;\u0026amp; typecmp(y, double*)) \\ swap_double(p_x, p_y); \\ else if (typecmp(x, int*) \u0026amp;\u0026amp; typecmp(y, int*)) \\ swap_int(p_x, p_y); \\ else \\ abort(); \\ }void swap_double(double* x, double* y){ double tmp = *x; *x = *y; *y = tmp;}void swap_int(int* x, int* y){ int tmp = *x; *x = *y; *y = tmp;}int main(void){ int x = 5, y = 6; double a = 5, b = 6; swap(\u0026amp;x, \u0026amp;y); swap(\u0026amp;a, \u0026amp;b); printf("%d-%d\", x, y); printf("%f-%f\", a, b);}
= = 相当痛苦, 而且一堆warning不知道如何消掉......(这个大概是我姿势水平的问题)
_Generic也没好到哪去, 给人感觉就是残废玩意儿. 只支持单参数, 多参数得各种trick更痛苦.
Generics for multiparameter C functions in C11
其实对于C来说, 大部分需要用到变量类型的地方用sizeof就行了
当然搭配__builtin__可以更严格#define swap(X, Y) \\ { \\ typeof(X) _X = (X); \\ typeof(Y) _Y = (Y); \\ static_assert(__builtin_types_compatible_p(typeof(_X), typeof(_Y)), \\ "WTF???"); \\ _swap(_X, _Y, sizeof(*_X)); \\ }void _swap(void* a, void* b, size_t s){ void* tmp = malloc(s); memcpy(tmp, a, s); memcpy(a, b, s); memcpy(b, tmp, s); free(tmp);}
■网友
不能,影响就是换C++模板
■网友
你要是用 GObject,或者自己撸一套 runtime,那么就可以有反射功能了(逃
■网友
C语言...
语言没有提供这个功能.
靠自己发挥比如这样:
你想也许可以放个识别类的东西在里面,那么先从基础类开始:typedef struct {uint32_t typeid_;int v;}Int;
但是这么干首先有个问题,id怎么分配?于是你用个enum来帮助解决问题:typedef enum{INT_,DOUBLE_,CHAR_,...}TypeId;//那么Int要写成:typedef struct {uint32_t typeid_ = INT_;int v;}Int;
接下来你每增加一个结构都要写成这样的形式,为防止自己写错,以及方便,你用宏对这些东西规范一下:
推荐阅读
- OC为何跌出语言榜前十
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 人民车市|新语言、新起点,捷达VS7 强势入局
- C语言 指针引用数组的地址问题
- 宝宝|判断宝宝冷不冷?摸摸两个部位就知道!
- 零基础入门学习啥语言好
- 有没有办法下有版权的歌
- 营销型外贸网站用哪种建站程序和语言比较好呢主要是适合优化,可扩展兼容性,安全性,后期网站扩展升级
- it培训被坑,怎样维权
- 有哪些轻易就被识别的淘宝刷单评论语言