C語言巨集定義實現sizeof功能
阿新 • • 發佈:2019-01-24
可以使用如下兩個巨集定義實現類似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