if语句和变量声明的MSVC语法错误

时间:2014-08-18 18:56:17

标签: c visual-c++ syntax-error cl

我无法解决这个问题。在命令行上使用MSVC编译器编译的Plain C。

  

Microsoft(R)32位C / C ++优化编译器版本15.00.30729.01 for 80x86
  版权所有(C)Microsoft Corporation。保留所有权利。

使用if (NULL == string) { return NULL; }块,我收到语法错误。

..\src\drift_charbuffer.c(78) : error C2143: syntax error : missing ';' before 'type'
..\src\drift_charbuffer.c(79) : error C2065: 'index' : undeclared identifier
..\src\drift_charbuffer.c(79) : error C2065: 'index' : undeclared identifier
..\src\drift_charbuffer.c(79) : error C2065: 'index' : undeclared identifier
..\src\drift_charbuffer.c(81) : error C2065: 'index' : undeclared identifier
..\src\drift_charbuffer.c(85) : error C2065: 'index' : undeclared identifier
..\src\drift_charbuffer.c(87) : error C2065: 'index' : undeclared identifier    

但如果没有if-block,它编译得很好。我只是看不出这里有什么问题。

char*
drift_charbuffer_tostring(const drift_charbuffer* buffer)
{
    // todo: UTF-8 encoding for characters outside the ASCII-range.
    char* string = drift_alloc(buffer->count + 1);
    if (NULL == string)
    {
        return NULL;
    }

    int index;     // Line: 78
    for (index = 0; index < buffer->count; ++index)
    {
        int value = *drift_charbuffer_get(buffer, index);
        if (value > 127)
            value = '?';

        string[index] = value;
    }
    string[index] = 0;
    return string;
}

1 个答案:

答案 0 :(得分:2)

嗯,你的“普通C”实际上是C99或后C99 C.同时,MSVC编译器只支持“经典​​好老平原C”AKA C89 / 90。在经典C中,混合语句和声明是非法的。所有声明都必须在块的最顶层完成。