可以使用如下两个宏定义实现类似sizeof的功能
//针对T为一个类型名的情况
#define _sizeof_type(T) (size_t)((T*)0 + 1)
//针对T为一个变量或者数组名的情况
#define _sizeof(T) ((size_t)(&T + 1) - (size_t)(&T))
测试代码
#include <stdio.h>
#define _sizeof_type(T) (size_t)((T*)0 + 1)
#define _sizeof(T) ((size_t)(&T+1)-(size_t)(&T))
int main()
{
int a = 3;
int *pa = &a;
int nums[3];
printf("%ld\n", _sizeof_type(int));
printf("%ld\n", _sizeof(a));
printf("%ld\n", _sizeof(pa));
printf("%ld\n", _sizeof(nums));
}
输出
在64位环境下测试,故第三行指针的长度为8.
4
4
8
12
本文介绍了如何在C语言中通过宏定义来实现类似`sizeof`的功能,提供了相关测试代码,展示了在64位环境下指针长度为8的实例。
1679

被折叠的 条评论
为什么被折叠?



