MsVc ++奇怪的错误:未声明变量

时间:2016-09-06 00:52:15

标签: c visual-studio-2010 compiler-errors

编译器正在上升此错误:

  

1> .... \ server \ sv_init.c(528):错误C2143:语法错误:缺少&#39 ;;'之前'键入'   1> .... \ server \ sv_init.c(529):错误C2065:' v' :未声明的标识符

     

...(包含v的所有指令行)

这是代码的一部分:

while(shl>=7) {  
      shl-=7;
      int v = (sh>>shl)&127;// <-- Error is here 
      if (v==0 || v=='"' || v=='%' || v=='@') {
            tmp[ol++] = '@';
            //    Com_Printf("OUT:%02X\n",tmp[ol-1]);
            if (ol==sizeof(tmp)-1) {
                tmp[ol]=0;
                if (csnr==PURE_COMPRESS_NUMCS) {
                    Com_Printf(err_chunk);
                    return 1;
                }
            SV_SetConfigstring( MAX_CONFIGSTRINGS-PURE_COMPRESS_NUMCS+csnr, tmp);
            csnr++;
            ol=0;
            }
            tmp[ol++] = v+1;
        } else {
                tmp[ol++] = v;
        }

我试图在错误行之前删除代码构建正常的行,感谢欢迎任何帮助或建议。

1 个答案:

答案 0 :(得分:1)

您的代码正在C模式下编译(因为该文件的扩展名为.c)。在C模式下,您无法在语句后声明变量。您有三种选择:

  • 更改代码以在封闭范围的开头声明变量,如下所示:
while(shl>=7) {
    int v; // declaration
    shl-=7;
    v = (sh>>shl)&127;

如果有很多这样的代码,这可能会有很多工作。

  • 通过将文件扩展名更改为.cpp或指定/ TP选项,以C ++模式进行编译。这可能有用,因为C ++主要是C的超集,但C ++不允许有一些C构造。
  • 使用在C中支持此功能的其他编译器,例如GCC。