1. 程式人生 > >C語言巨集定義實現sizeof功能

C語言巨集定義實現sizeof功能

可以使用如下兩個巨集定義實現類似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