【发布时间】:2014-03-11 23:52:44
【问题描述】:
我想请教一下这段代码
#include <stdio.h>
#include "bit-array.h"
#ifndef BitArray
#define BitArray(array_name, size)\
int size_in_bits = size/sizeof(long);/*thanks to this, it should work on x64*/\
size_in_bits /= 8;/*conversion from bytes to bits*/\
int array_name[size_in_bits];/*declaration of an array*/\
for(int i = 0; i < size_in_bits; i++)/*filling the array by zeros*/\
array_name[i] = 0;\
#endif
int main()
{
BitArray(test, 100);
for(int i = 0; i < 100; i++)
printf("%d\n", test[i]);
return 0;
}
据我所知,这个宏 BitArray(array_name, size)(放置在单独的头文件 bit-array.h 中)应该定义并用零填充一个数组,然后它应该将零打印到终端。 但是,它会从内存中打印一些随机数。我有点卡在这里。你能帮忙吗?
编辑:感谢您的所有回答。我必须道歉,我忘了在这里写一件重要的事情。事实上,在这个任务中,这个原型必须是宏:BitArray(array_name, size)。
【问题讨论】:
-
size_in_bits不是 100. 并使用memset清除内存 -
@KerrekSB:您似乎忘记了可变长度数组、VLA、C99 中的标准和 C11 中的可选。
-
@JonathanLeffler:确实如此,但是当绑定静态可用时,OP 发布的构造是不必要地使用动态绑定。我发布的解决方案仍可用于创建 VLA。我主要反对中间变量...
标签: c arrays macros header initialization