错误C2099:在开发人员推荐提示VS 2017中,初始化程序不是常量

时间:2018-08-05 11:12:46

标签: c

void primeFinder (int start,int final);


int *prime_list=(int*)malloc(1*sizeof(int));
int element_number=0;

void primeFinder (int start,int final){
    /*if (start<1){
        return EXIT_FAILURE;
    }*/
    int i,j;
    for(i=start;i<=final;i++){
        for (j=start;j<=i;j++){
            if(i%j==0){
                break;
            }
        }
        if(i==j){
            element_number++;
            prime_list=(int*)realloc(prime_list,element_number*sizeof(int));
        }
    }
}

它给出以下错误。关于编译器吗?我正在使用“ VS 2017开发人员命令提示符”

error C2099: initializer is not a constant

2 个答案:

答案 0 :(得分:1)

这似乎是尝试以prime_list进行首字母缩写化的一种尝试。

int *prime_list=(int*)malloc(1*sizeof(int));

但是,使用malloc是对函数的调用,只能在符文时执行,因此必须是函数的一部分。

这就是编译器告诉你的。

如果要使用已分配的(且非常小的)初始缓冲区进行初始化,则可能需要事先使用一些初始化函数。

答案 1 :(得分:0)

您需要从全局指针声明中移出分配

具有静态存储(全局)的变量需要常量初始化程序。

int *prime_list;

int main(void)
{
  prime_list = malloc(1*sizeof(int));
  .....

如果使用VS编译C程序,则需要设置适当的编译语言: enter image description here

之后,您将其编译为C程序。