C - 不能将我的sizeof实现用作数组大小

Zag*_*Gol 2 c

按照建议实现了sizeof .当我想打印变量的大小时它工作正常,但我不能将它用作数组大小.

这是代码:

#include <stdio.h>
#include <stdlib.h>

#define my_sizeof(var) (size_t)((char *)(&var+1)-(char*)(&var))

int s = 7;

void main()
{
    int arr[sizeof(s)]; //works OK
    int arr2[my_sizeof(s)];//error
    printf("%d\n", my_sizeof(s));//works OK
    int temp = 0;
}
Run Code Online (Sandbox Code Playgroud)
Error   1   error C2057: expected constant expression
Error   2   error C2466: cannot allocate an array of constant size 0
Error   3   error C2133: 'arr2' : unknown size  
Run Code Online (Sandbox Code Playgroud)

P.P*_*.P. 6

您的实现my_sizeof并不完全等同sizeof于C中的运算符,它是一个编译时运算符,而您的运算符只能在运行时计算大小.

所以,

int arr[sizeof(s)]; 
Run Code Online (Sandbox Code Playgroud)

声明一个大小的数组,sizeof(s)

int arr2[my_sizeof(s)];
Run Code Online (Sandbox Code Playgroud)

是否相同,但数组大小不是在编译时计算,而是在运行时计算.为此,您需要C99的VLA的支持,您的编译器不支持并且错误输出.