无法创建具有常量大小的数组(“预期的常量表达式”)

时间:2018-03-18 13:09:38

标签: c visual-studio

此问题与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];
}

2 个答案:

答案 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仍然不完全支持。