在使用C99进行编译时,“ISO C90”错误不允许使用VLA

时间:2016-11-20 20:55:24

标签: c compilation

我的编译行:

gcc -Wextra -Wall -Wvla -std=c99 StringChange.c -o StringChange

我的节目:

#include <stdio.h>
#define MAX_STRING_LENGTH 51

char switchChar(char c)
{
    if((c>='A')&&(c<='Z'))
        {
        c = c + 32;

        }
     if((c >='a')&&(c<='z'))
        {
        c = c - 32;
        }
     if(c>'5')
        {
           c = 56;

        }
     if (c<'5')
        {
           c = 48;

        }
    return c;
}

int main(void) 
{   
    char temp;
    int i=0,j=0;
    char stringInput[MAX_STRING_LENGTH];
    printf("Please enter a valid string\n");
    scanf("%s",stringInput);

    while(stringInput[i]!='\0')
        {
            i++;
        }
    char newString[i];
    for(j = 0;j<i;j++)
    {
        temp = switchChar(stringInput[j]);
        newString[j] = temp;
    }
    printf("\"%s\"", stringInput);
    printf("->");
    printf(  "\"%s\"",newString);        

    return 0;
}

编译时我不断收到错误'ISO C90禁止变长数组newString',即使我在命令行中使用C99进行编译(其他stackexchange问​​题中的解决方案)。

非常感谢您的帮助和任何其他评论。 谢谢

1 个答案:

答案 0 :(得分:3)

-Wvla选项提供该诊断。来自gcc documentation

  

-Wvla
     如果代码中使用了可变长度数组,则发出警告。 -Wno-vla防止变长数组的-Wpedantic警告。

显然错误信息有点误导。但它主要用于旧代码(在C99之前)到VLA使用,其中支持VLA作为扩展。由于您是在C99模式下编译,因此只需从命令行选项中删除-Wvla