Компилятор Microsoft C: Встроенное объявление переменной?

Я пишу C в Visual Studio 2010. Компилятор, кажется, не хочет позволить мне использовать встроенные объявления переменной. Следующий код производит ошибку:

unsigned int fibonacci_iterative(unsigned int n) {
 if (n == 0) {
  return 0;
 }
 if (n == 1) {
  return 1;
 }

 unsigned int prev_prev = 0; // error
 unsigned int prev = 1; // error
 unsigned int next = 0; // error
 for (int term_number = 0; term_number < n; term_number++) {
  unsigned int temp = prev_prev + prev;
  prev = next;
  prev_prev = prev;
  next = temp;
 }

 return next;
}

Ошибка:

ошибка C2143: синтаксическая ошибка: пропавшие без вести''; перед 'типом'

ошибка C2143: синтаксическая ошибка: пропавшие без вести''; перед 'типом'

ошибка C2143: синтаксическая ошибка: пропавшие без вести''; перед 'типом'

Почему это происходит? Существует ли установка для создания компилятора не настолько строгим?

11
задан Jon Seigel 6 April 2010 в 02:00
поделиться

3 ответа

Установка деклараций после не-деклараций не допускается в C89, хотя допускается в C ++ и в C99 (MSVC до сих пор не поддерживает C99).

В C89 вы можете достичь аналогичного эффекта с помощью вложенного блока:

unsigned int fibonacci_iterative(unsigned int n) {
    if (...) {
    }

    {
       unsigned int prev_prev = 0;
       unsigned int prev = 1;
       unsigned int next = 0;
       ...
    }
 }
10
ответ дан 3 December 2019 в 09:20
поделиться

Попробуйте скомпилировать его как C ++. C99 позволит объявлять переменные, кроме вершины объема, но VC не знает о C99.

1
ответ дан 3 December 2019 в 09:20
поделиться

Inline-объявления переменных поддерживаются только в C99-совместимом компиляторе. Microsoft Visual C++, похоже, не поддерживает C99 (ref). Вам либо придется использовать C99-совместимый компилятор (GCC скомпилирует код со встроенными переменными при использовании с -std=c99), либо объявить свои переменные в верхней части функции.

EDIT: Или попробуйте режим C++, как предлагает akallio, хотя C и C++ не являются строго совместимыми друг с другом, так что если (например) вы используете в вашем C-коде какие-либо специфические для C++ ключевые слова, то он не будет компилироваться.

1
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: