[C Lang] 변수의 선언 위치에 관한 질문
글쓴이: line123 / 작성시간: 화, 2003/12/23 - 5:10오후
프로그래밍 공부를 해보려고 이런 코드를 짜봤는데요...
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int 5 main(int argc, char *argv[]) 6 { 7 if (argc != 2) 8 { 9 printf("argument error\n"); 10 exit(1); 11 } 12 13 int b; 14 15 b = atoi(argv[1]); 16 printf("your input : %d\n", b); 17 18 return 0; 19 }
Quote:
localhost:~$ gcc -Wall temp.c
temp.c: In function `main':
temp.c:13: parse error before `int'
temp.c:15: `b' undeclared (first use in this function)
temp.c:15: (Each undeclared identifier is reported only once
temp.c:15: for each function it appears in.)
13번째 줄의 int b; 를 if 문 위로 위치시키면 에러가 안납니다.
왜 이런건지 좀 가르쳐 주시겠습니까?
이런 사소한 기초 문법이 있는 문서도 알려주시면 감사하겠습니다.
Forums:
아주 예전엔 C언어에서 변수 선언을 먼저 전부 해주고 나서본 프로그램
아주 예전엔 C언어에서 변수 선언을 먼저 전부 해주고 나서
본 프로그램을 짜야만 했던 시절이 있긴 한데..
정확히 언제인지는 모르겠지만 C 표준이 바껴서 변수 선언의 위치가
편해진걸로 알고 있는데.. 그 문제 아닌가 싶습니다..
오래된 컴파일러에서는 그런 문제가 보일껍니다..
허접한 답변이였지만 여튼 도움이 되셨으면 하네요.
p.s 저는 버릇때문에 여전히 변수선언을 전부 해줘버리는데..
그게 아직은 좋은듯합니다. 가끔 오래된 시스템을 만나기도 하거든요 :D
light my fire
안녕하세요.. 질문만 할줄 알았던 제가 답변까지;; 보통 변수의
안녕하세요.. 질문만 할줄 알았던 제가 답변까지;;
보통 변수의 선언은..
함수의 초반에 해주죠..
지금 코드 처럼 int b; 를 중간에 넣어주면..
오류가 나지요 그이유는..
컴파일러의 동작과정에 있다고 생각하는데요..
컴파일러는 먼저.. 함수와 변수의 선언된 곳을
처리하고..
이런 이런 함수 와 변수가 있다고 생각하고 컴파일을 한다고 알고 있습니다.
그런데 중간에 갑자기 새로운 변수를 선언하니.. 컴파일러는 이건 뭐지? 하면서 오류를.. 낸다고 합니다 (-_-);
컴파일러는 단순하거든요..;;
허접한 답변... 고수님들이 보충해주실듯 ㅜㅜ;
Linux 해안가에서.. 모래알 줍는중.. 언제다 주워?
예전의 C언어에서는 선언문이 반드시 함수의 처음(혹은 블럭의 처음)에 위
예전의 C언어에서는 선언문이 반드시 함수의 처음(혹은 블럭의 처음)에 위치해야 했습니다. 그러나 C99(99년도에 제정된 C 표준)에서부터는 아무 곳에서나 선언 가능한걸로 바뀌었습니다(...정확히 어떻게 바뀌었는지는 모르겠지만). 그러나 현존하는 모든 컴파일러가 C99를 지원하는 것은 아니고, C99를 지원하는 컴파일러들조차도 모든 특징을 완벽하게 지원하는 것은 아니므로 확인 후에 사용하는 것이 좋습니다.
원래 C는...
JAVA나 C++ 에서는 변수 선언이
필요한 곳에서 이루어 질 수 있지만,
C 언어는 그렇지 않습니다.
왠만하면 함수의 시작부분에 하셔야 합니다. :)
답변 감사합니다.
답변 감사합니다.
컴파일러 언급을 하셔서...
제가 사용한 컴파일러에서는 "아무데서나 선언하기"가 지원이 안되나 봅니다 ...^^;
C99... 참고해봐야 겠군요...
Re: 답변 감사합니다.
예 gcc 3.x에서부터 지원합니다 :)
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오...오묘합니다...
위의 컴파일러를 가진 시스템에서 동일한 코드로 시도했더니 정말 되는군요!
참 신기할 따름입니다. :- D
답변 주신 분들 모두 감사합니다~!
댓글 달기