2014-02-11 4 views
1

Объявляет переменную в пределах для не разрешена в C? Вот код,Ошибка при объявлении переменной in for statement

for(int i = 1; i<max; i++) 

И я получаю сообщения об ошибках,

ошибка C2143: синтаксическая ошибка: отсутствует ';' перед «типа»
ошибка C2065: «я»: необъявленный идентификатор

Это работает, если я объявляю переменную я холмика перед цикл,

int i; 
for(i = 1; i<max; i++) 

Я никогда не ожидая сообщение об ошибке на такой простой строке кода. Не могли бы вы помочь мне объяснить причину этого?

Редактировать:
У меня есть Visual C++ 2010 Express. Я использую компилятор командной строки cl.

Update:
На основе ответов, я нашел Visual C++ 2010 не поддерживает C98.

Я, наконец, установил Visual Studio 2013 Express для рабочего стола, который поддерживает C98 и работает как ожидалось.
Спасибо всем вам за ценную информацию.

+0

В C вы должны объявить все свои переменные в начале блока {...}, в C++ вы можете объявить их где угодно - и внутри for() – TonyWilk

+1

Попробуйте 'gcc -std = c99 yourFile.c' до скомпилируйте свой код с использованием стандарта C99, который позволяет это –

ответ

1

Это разрешено только в C99. Не уверен, какой компилятор вы используете, clang и gcc имеют std = c99.

+0

Я использую компилятор командной строки Microsoft, который поставляется с Visual C++ 2010 (Express Edition). –

0

Это C99, и ваш компилятор, вероятно, слишком старый или не установлен правильно, чтобы использовать этот «новый» стандарт.

3

Возможно, вы используете стандартный компилятор pre-C99. В C89/ANSI C вам нужно объявить переменные в начале блока области видимости. Обратите внимание на это, потому что вы, скорее всего, получите аналогичные ошибки при объявлении переменных после того, как вы совершили некоторые вызовы функций и т. Д.

2

MSVC is c89. c89 не допускает этого. использование /TP опция. Этот параметр скомпилирован в режиме C++.

0

Visual Studio очень плохо работает, когда дело доходит до C и поддерживает только 24-летнюю устаревшую версию C под названием C90. И он поддерживает эту версию плохо. Microsoft не имеет строгого соответствия C компилятора.

Если вы используете настоящий компилятор C, код будет скомпилирован просто отлично.

Смежные вопросы