같은코드인데.. 위치에 따라 에러가..
글쓴이: 찬밥 / 작성시간: 월, 2004/10/04 - 4:57오후
어떤 컴퓨터에서는 그냥 실행이 되고..
어떤 컴퓨터에서는 에러가 납니가.. 이게 왜 그런거죠?
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand((unsigned)time(NULL)); int quiz; int i,n; quiz=rand(); for(n=1;n<=20;n++) { printf("스무고개 게임입니다. 숫자를 입력하세요 %d번 남았습니다. : \n",21-n); scanf("%d",&i); if(i>quiz) printf(" %d 보다 작은수를 입력하세요. \n", i); else if(i<quiz) printf(" %d 보다 큰수를 입력하세요. \n",i); else if(i==quiz) { printf(" 찾았습니다. 축하해요~~.\n"); break; } else if(n>20) printf("다음기회를 이용해주세요 정답은 %d 입니다. \n",quiz); } }
Quote:
--------------------Configuration: asdf - Win32 Debug--------------------
Compiling...
asdf.c
C:\언어\asdf\asdf.c(9) : error C2143: syntax error : missing ';' before 'type'
C:\언어\asdf\asdf.c(10) : error C2143: syntax error : missing ';' before 'type'
C:\언어\asdf\asdf.c(13) : error C2065: 'quiz' : undeclared identifier
C:\언어\asdf\asdf.c(16) : error C2065: 'n' : undeclared identifier
C:\언어\asdf\asdf.c(19) : error C2065: 'i' : undeclared identifier
Error executing cl.exe.asdf.exe - 5 error(s), 0 warning(s)
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int quiz; int i,n; srand((unsigned)time(NULL)); quiz=rand(); for(n=1;n<=20;n++) { printf("스무고개 게임입니다. 숫자를 입력하세요 %d번 남았습니다. : \n",21-n); scanf("%d",&i); if(i>quiz) printf(" %d 보다 작은수를 입력하세요. \n", i); else if(i<quiz) printf(" %d 보다 큰수를 입력하세요. \n",i); else if(i==quiz) { printf(" 찾았습니다. 축하해요~~.\n"); break; } else if(n>20) printf("다음기회를 이용해주세요 정답은 %d 입니다. \n",quiz); } }
이건 에러가 안납니다
어떤 컴퓨터에서는 위 두 코드가 에러없이 실행이 되고요..
어떤 컴퓨터에서는 첫번재 코드는 에러가 생기네요..
뭐가 문제일까요ㅕ..
Forums:
gcc 2.9x 버전과 gcc 3.x 버전의 차이 같습니다.두 시스템
gcc 2.9x 버전과 gcc 3.x 버전의 차이 같습니다.
두 시스템의 컴파일러 버전이 다를 것 같군요.
gcc 2.9x 버전의 경우 전통적인 ansi c 규격을 따르므로 변수 선언은 항상 최상위에 위치해야 합니다.
gcc 3.x의 경우 확장된 규격을 따르므로 변수 선언이 나중에 되어도 된다고 알고 있습니다.
다 적고 나서 다시 보니 gcc인지 아닌지 모르겠군요. WIN32 DEBUG라는 부분이 보이는군요. :oops:
두 시스템의 컴파일러 버전을 확인해보시기 바랍니다.
별은 바라보는 자에게 빛을 준다.
제가 생각할 수 있는 바는 2가지 입니다.[quote]1. 컴
제가 생각할 수 있는 바는 2가지 입니다.
뭐 이정도입니다.
>/dev/null 2>&1
c 표준에서는 사실 변수 선언시 블럭의 맨 앞에서 하게 되어 있습니다.
c 표준에서는 사실 변수 선언시 블럭의 맨 앞에서 하게 되어 있습니다. 근데 gcc 확장에서부터 변수 선언이 중간에서 해도 에러가 없게 되었죠. 그래서 윗분 말씀대로 컴파일러의 차이로 인해서 에러가 날수도 있고, 안 날수도 있을 것입니다. 가급적 표준에 맞춰서 하시는게 좋지 않을까 싶습니다. 그래야 이식성에서도 문제가 없을테니깐요. ^^
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.
가장 최근의 표준인 C99부터는 변수 선언이 꼭 { } 안의 맨 처음에
가장 최근의 표준인 C99부터는 변수 선언이 꼭 { } 안의 맨 처음에 올 필요가 없습니다. gcc 2.9x는 C99를 제대로 지원하지 못합니다.
기존의 컴파일러들을 생각한다면 변수 선언은 늘 앞에 두는 것이 좋겠습니다만, 이제 표준이 바뀌었으므로 오래된 컴파일러를 사용해야 하는 환경이나 특별히 이식성이 대단히 중요한 경우가 아니라면 아무데나 두셔도 상관 없습니다. 앞으로 나오는 컴파일러들은 대부분 지원하게 될 것입니다.
이식성 있는 코드를 만들기위해서는 처음 처럼 코딩하는 습관을 버리세요.
이식성 있는 코드를 만들기위해서는 처음 처럼 코딩하는 습관을 버리세요.
인텔 아키텍쳐위에서만 코딩하라는 법은 없거든요.
Do you think that's the air you are breathing now?
근데 이상한건..학교 실습실에서 바로 옆에있는 컴퓨터 끼리같은 컴
근데 이상한건..
학교 실습실에서 바로 옆에있는 컴퓨터 끼리
같은 컴파일러(vc++) 로 했는데도.. 참 이상하게도.. 에러가 납니다..
vc++에서 다르게 나타난다면저장하는 확장자를 잘 살펴보시기 바랍니다
vc++에서 다르게 나타난다면
저장하는 확장자를 잘 살펴보시기 바랍니다.
.c로 저장이 되어 있을경우, c compiler가 사용되고
.cpp로 저장이 되면 cpp compiler가 사용됩니다
댓글 달기