此问题与Windows 10中的Visual Studio(Community 2015)中的C有关。
我似乎无法创建一个const大小的数组 - 下面的代码会导致“预期的常量表达式”错误,阻止构建。这是一个带有size_t大小的wchar_t数组,但我看到char和amp的相同行为其他数组类型& int常量。
我知道在编译时需要知道数组的大小,但这肯定就是这种情况。是什么给了什么?
#include <stdio.h>
void main()
{
size_t const newsize = 100;
wchar_t fileData[newsize];
}
答案 0 :(得分:4)
我知道在编译时需要知道数组的大小,但这肯定就是这种情况。
事实并非如此。在C中,const
限定不会导致“常量表达式”。因此newsize
不是constant expression(与C ++不同)。
如果您的实现支持variable length array(VLA),则您的代码在C99和C11中有效(VLA在C11中是可选的)。但是,似乎Visual Studio似乎不支持VLA并期望像C89那样对数组大小进行“常量表达”。
所以你可能不得不使用动态内存分配(malloc和朋友),或者只是将100
指定为大小,或者使用宏来定义大小等等。
答案 1 :(得分:1)
在C中,const限定类型与常量文字不同。
您在MSVC中有几个选项。首先,您可以硬编码100
:
#define SIZE 100
int main(void) // main returns int etc etc
{
wchar_t fileData[SIZE];
}
或者,您可以使用动态内存分配创建阵列:
#include <stdlib.h>
int main(void)
{
const size_t newsize = 100;
wchar_t *fileData;
fileData = calloc(sizeof filedata, newsize);
}
请注意,可以在C99中执行const size_t newsize = 100; wchar_t fileData[newsize];
,但MSVC仍然不完全支持。