Я не могу понять это. Обычный C, скомпилированный с помощью компилятора MSVC в командной строке.
Microsoft (R) 32-разрядный оптимизирующий компилятор C/C++ версии 15.00.30729.01 для 80x86
Copyright (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. Я просто не вижу, что здесь не так.
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;
}
int index;
в начало блока? (Старый C может не разрешать объявления переменных, кроме начала блока. - person chux - Reinstate Monica   schedule 18.08.2014{}
вокруг{ int index; for (index = 0; index < buffer->count; ++index) { int value = *drift_char buffer_get(buffer, index); if (value > 127) value = '?'; string[index] = value; } string[index] = 0;}
- person chux - Reinstate Monica   schedule 18.08.2014