2013-09-18 6 views
1

Я изо всех сил, чтобы понять, почему я получаю сообщение об ошибке в следующем коде при попытке компиляции:Объявление локальной переменной в C

#include <stdlib.h> 
#include <stdio.h> 

int main() 
{ 
    puts(""); 
    int i = 0; 

    return 0; 
} 

Если я закомментируйте puts("");, он будет компилировать.

Я использую Visual Studio, и я выполняю это как код C, используя /TC.

ответ

8

Visual Studio C несколько устарел и использует C89.

Для C89 вы должны объявить все ваши переменные в начале scope block.

В случае кода выше, это должно работать

int main() 
{ 
    int i = 0; 
    puts(""); 
    return 0; 
} 

Обратите внимание, что вы можете также сделать следующее

int main() 
{ 
    puts(""); 
    { 
     int i = 0; 
    } 
    return 0; 
} 
+1

Важное примечание во втором примере: 'i' действителен только в' {} '. Во-вторых, MSVS в основном использует «C89», однако это не совсем так. Он поддерживает некоторые функции C99, однако «заявление перед объявлением» не является одним из них. – Jite

+0

Thx для быстрого ответа и отличного ответа. Из любопытства; Знаете ли вы, можно ли изменить компилятор в визуальной студии? – RayOldProf

+0

@RezaAyadipanah, да, вы можете сделать «Makefile project» и настроить компилятор в make-файле как угодно. – Vicky

1

Я думаю, что вы используете старую C стандартный C89.

Стандарт C89 не позволяет объявлять переменные после вызова какой-либо функции. Все объявление переменной должно быть в начале блока области . (Thanks, Gearoid Murphy).

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