Я столкнулся со странной ошибкой компилятора (при использовании VC2010) при попытке скомпилировать библиотеку (flextGL), что для меня абсолютно бессмысленно.
Рассмотрим следующий минимальный пример C (test.c
):
void a()
{
// ...
}
int b()
{
a();
int c;
return 0;
}
Если я пытаюсь скомпилировать это под VC2010, я получаю следующую ошибку:
test.c(10) : error C2143: syntax error : missing ';' before 'type'
Ошибка относится к строке int c;
.
После некоторых экспериментов я также обнаружил следующее:
- Если я удаляю строку
int c;
, она прекрасно компилируется.
- Если я удаляю строку
a();
, она прекрасно компилируется.
- Если я переместу строку
int c;
над строкой a();
, она будет хорошо скомпилирована.
- Если я переименую файл для компиляции в C ++ вместо C (
.cpp
вместо .c
), он скомпилируется нормально.
Почему происходит эта странная ошибка?
Мое единственное предположение - это одна из тех архаичных особенностей C, где все переменные должны быть объявлены в верхней части функции. Но я бы подумал, что современные компиляторы умнее этого.