如何在C语言中实现数据类型数组?循环获取类型大小方法咨询
循环获取多数据类型sizeof值的解决方案
你的原代码存在语法错误:#define t_array = [ int, float ];不符合C语言规范,C不支持这种方式定义类型集合,且t_array[0]无法被识别为合法类型名。以下是两种可行的实现方案:
方案1:预处理器宏列表遍历
利用预处理器宏批量处理目标类型,实现类似循环的效果,代码简洁且无需手动维护数组:
#include <stdio.h> // 打印类型大小的宏,新增类型名称输出更清晰 #define t_size(type) printf("sizeof(%s) = %zu\n", #type, sizeof(type)) // 定义需要检测的所有类型,新增类型直接添加X(类型)即可 #define TYPE_LIST \ X(int) \ X(float) \ X(double) \ X(char) \ X(long long) int main() { // 展开TYPE_LIST,对每个类型调用t_size #define X(type) t_size(type); TYPE_LIST #undef X return 0; }
方案2:结构体成员索引实现
如果你偏好通过结构体索引的方式,可定义包含目标类型成员的结构体,结合成员信息数组实现循环遍历:
#include <stdio.h> #include <stddef.h> #define t_size(val) printf("sizeof(%s) = %zu\n", #val, sizeof(val)) // 结构体成员对应各目标类型 struct TypeSet { int t_int; float t_float; double t_double; char t_char; }; // 存储成员名称与大小的结构体 typedef struct { const char* type_name; size_t type_size; } TypeInfo; int main() { struct TypeSet ts; TypeInfo type_list[] = { {"int", sizeof(ts.t_int)}, {"float", sizeof(ts.t_float)}, {"double", sizeof(ts.t_double)}, {"char", sizeof(ts.t_char)} }; // for循环遍历输出 int count = sizeof(type_list) / sizeof(type_list[0]); for (int i = 0; i < count; i++) { printf("sizeof(%s) = %zu\n", type_list[i].type_name, type_list[i].type_size); } // 也可直接通过结构体成员调用t_size t_size(ts.t_int); t_size(ts.t_float); return 0; }
内容的提问来源于stack exchange,提问作者Nulltiton
相关产品推荐
相关产品推荐

