在C中实现sizeof运算符

时间:2015-09-15 01:49:02

标签: c macros

我尝试实现此问题中给出的内容。sizeof implementation

#include <stdio.h>
#include <stdint.h>

#define my_sizeof(type) ((char*)(&type + 1)-(char*)(&type))

int main()
{
    printf("Size of int   %d \n",my_sizeof(int));

    return 0;
}

然而,当我编译时,我收到以下错误。

test.c:10:44: error: expected expression before ‘int’
     printf("Size of int   %d \n",my_sizeof(int));
                                            ^
test.c:5:35: note: in definition of macro ‘my_sizeof’
 #define my_sizeof(type) ((char*)(&type + 1)-(char*)(&type))
                                   ^
test.c:10:44: error: expected expression before ‘int’
     printf("Size of int   %d \n",my_sizeof(int));
                                            ^
test.c:5:54: note: in definition of macro ‘my_sizeof’
 #define my_sizeof(type) ((char*)(&type + 1)-(char*)(&type))
                                                      ^

2 个答案:

答案 0 :(得分:3)

((char*)(&int + 1)-(char*)(&int))

您的宏正在尝试获取某种类型的地址。你可以通过在局部变量中包含整个块来使宏更长一些(但是宏不会按照你想要的方式工作)或只是在变量上使用宏而不是类型。

答案 1 :(得分:2)

这适用于类型,但不适用于变量:

#define tsizeof(type) (((char *)(1+((type *)0))) - ((char *)((type *)0)))