C语言中能否通过sizeof运算符判断某数据类型是否为struct结构体
仅用sizeof判断C语言结构体类型的可行性解答
最终结论
仅使用sizeof()运算符完全无法判断一个类型是否为结构体类型。
具体原因
sizeof()的返回值仅代表目标类型/变量占用的内存字节数,不携带任何类型类别的特征信息。相同字节大小的类型可以是整型、浮点型、数组、指针、结构体等任意类别,比如大小为4字节的类型既可以是32位int,也可以是float,还可以是只包含4个char成员的结构体,仅通过字节数完全无法区分。- 结构体的大小没有固定的特征值。同一个结构体定义在不同编译环境、不同字节对齐规则下大小可能发生变化,更不存在某一个或某一类数值可以和结构体类型直接绑定。
- 你提到的「用
sizeof(my_variable) == 2判断是16位类型」的逻辑本身也不严谨:你完全可以定义一个仅包含两个char成员、关闭字节对齐的结构体,它的sizeof结果也是2,但它显然不是16位基础类型,该逻辑从根源上就不成立。
可选替代方案
如果确实需要判断类型是否为结构体,可以使用C11标准引入的_Generic泛型选择语法,结合自定义的类型匹配规则实现,仅靠sizeof没有任何实现可能。
内容的提问来源于stack exchange,提问作者euraad
相关产品推荐
相关产品推荐

