2013-11-03 3 views
2

모든 변수를 함수의 시작 부분에 선언해야한다는 책에서 C 프로그래밍을 읽었습니다. 다음 코드를 시도했지만 오류가 발생하지 않았습니다. 나는 mingw와 codeblocks를 사용하고있다.C mingw의 변수 선언

#include <stdio.h> 

int main() 
{ 
    int i=10; 
    printf("%d\n",i); 

    int j=20; 
    printf("%d\n",j); 

    return 0; 
} 

내가 어떤 컴파일러 설정 또는 책에 주어진 표준과 호환되도록 뭔가를 변경해야합니까 다음과 같이 코드는?

-std = c89 컴파일러 옵션을 사용하고 있습니다. 아래의 컴파일 메시지를 참조하십시오 :

-------------- Clean: Debug in HelloWorld (compiler: GNU GCC Compiler)--------------- 

Cleaned "HelloWorld - Debug" 

-------------- Build: Debug in HelloWorld (compiler: GNU GCC Compiler)--------------- 

mingw32-gcc.exe -Wall -std=c89 -g  -c D:\MyCodeBlocksProjects\HelloWorld\main.c -o  obj\Debug\main.o 
mingw32-g++.exe -o bin\Debug\HelloWorld.exe obj\Debug\main.o  
Output size is 68.53 KB 
Process terminated with status 0 (0 minutes, 0 seconds) 
0 errors, 0 warnings (0 minutes, 0 seconds) 
+0

은 추가'-std = c89' 당신의 GCC 명령 줄에 C89 모드에서 컴파일러를 넣어 것입니다 :

내가 블록의 시작 부분에서 무슨 뜻인지 설명하기 위해이 법률 C89 구문이다 . –

+0

@JonathonReinhart -std = c89 옵션을 시도했습니다. 위의 컴파일러 메시지를 참조하십시오. 아직도 아무 것도 불평하지 않습니다. 더 이상 설정해야합니까? – abhithakur88

+0

변수가 선언 된 곳이 정말로 중요한 것은 아니기 때문에이 경고는 ['-pedantic'] (http : // gcc.)를 사용하는 경우에만 생성된다는 사실을 알게 된 것은 그리 놀랍지 않습니다. gnu.org/onlinedocs/gcc/Warning-Options.html), [Yu Hao는 아래에 언급되어 있습니다] (http://stackoverflow.com/a/19750011/119527). –

답변

3

모든 변수는 함수의 시작 부분에 선언해야합니다.

정확하게 말하면, 블록의 시작 부분에 선언해야합니다. 그리고 이것은 C89에서만 사실입니다. C99에서이 제한을 제거했습니다. 따라서 컴파일러를 엄격한 C89 모드로 변경할 수 있습니다. 예를 들어 GCC의 경우 -std=c89 옵션입니다. 표준에서 요구하는 모든 진단을 얻으려면 -pedantic 옵션도 지정해야합니다.

void foo() 
{ 
    int x = 1; 
    x = x + 1; 
    { 
     int y = 42; /**OK: declaration in the beginning of a block*/ 
    } 
}