我按照建议实现了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)
您的实现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的支持,您的编译器不支持并且错误输出.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |