같은코드인데.. 위치에 따라 에러가..

찬밥의 이미지

어떤 컴퓨터에서는 그냥 실행이 되고..
어떤 컴퓨터에서는 에러가 납니가.. 이게 왜 그런거죠?

#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);
		}
}
		
	

이건 에러가 안납니다

어떤 컴퓨터에서는 위 두 코드가 에러없이 실행이 되고요..
어떤 컴퓨터에서는 첫번재 코드는 에러가 생기네요..
뭐가 문제일까요ㅕ..

mooore의 이미지

gcc 2.9x 버전과 gcc 3.x 버전의 차이 같습니다.
두 시스템의 컴파일러 버전이 다를 것 같군요.

gcc 2.9x 버전의 경우 전통적인 ansi c 규격을 따르므로 변수 선언은 항상 최상위에 위치해야 합니다.

gcc 3.x의 경우 확장된 규격을 따르므로 변수 선언이 나중에 되어도 된다고 알고 있습니다.

다 적고 나서 다시 보니 gcc인지 아닌지 모르겠군요. WIN32 DEBUG라는 부분이 보이는군요. :oops:

두 시스템의 컴파일러 버전을 확인해보시기 바랍니다.

별은 바라보는 자에게 빛을 준다.

dreampia의 이미지

제가 생각할 수 있는 바는 2가지 입니다.

Quote:

1. 컴파일시에 compiler가 C++/C 일 경우
C++ : 둘다 컴파일 됨
C : 1번 Error

Quote:

2. C일 경우 c99(C표준) 적용유무에 따라
VC는 잘 몰라서 gcc를 예로 들면
1,2가 전부 컴파일되려면 컴파일시에 -std=c99 를 넣어주면 됨.
-std=c99가 없을 경우 gcc도 1번은 컴파일 error 발생.

c99이전 C(현재 대부분 C complier default)는 변수선언이 무조건 맨앞에 있어야 함.

뭐 이정도입니다.

>/dev/null 2>&1

powerson의 이미지

c 표준에서는 사실 변수 선언시 블럭의 맨 앞에서 하게 되어 있습니다. 근데 gcc 확장에서부터 변수 선언이 중간에서 해도 에러가 없게 되었죠. 그래서 윗분 말씀대로 컴파일러의 차이로 인해서 에러가 날수도 있고, 안 날수도 있을 것입니다. 가급적 표준에 맞춰서 하시는게 좋지 않을까 싶습니다. 그래야 이식성에서도 문제가 없을테니깐요. ^^

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

lsj0713의 이미지

가장 최근의 표준인 C99부터는 변수 선언이 꼭 { } 안의 맨 처음에 올 필요가 없습니다. gcc 2.9x는 C99를 제대로 지원하지 못합니다.

기존의 컴파일러들을 생각한다면 변수 선언은 늘 앞에 두는 것이 좋겠습니다만, 이제 표준이 바뀌었으므로 오래된 컴파일러를 사용해야 하는 환경이나 특별히 이식성이 대단히 중요한 경우가 아니라면 아무데나 두셔도 상관 없습니다. 앞으로 나오는 컴파일러들은 대부분 지원하게 될 것입니다.

운형의 이미지

이식성 있는 코드를 만들기위해서는 처음 처럼 코딩하는 습관을 버리세요.
인텔 아키텍쳐위에서만 코딩하라는 법은 없거든요.

Do you think that's the air you are breathing now?

익명 사용자의 이미지

근데 이상한건..
학교 실습실에서 바로 옆에있는 컴퓨터 끼리
같은 컴파일러(vc++) 로 했는데도.. 참 이상하게도.. 에러가 납니다..

mrmirang의 이미지

vc++에서 다르게 나타난다면
저장하는 확장자를 잘 살펴보시기 바랍니다.
.c로 저장이 되어 있을경우, c compiler가 사용되고
.cpp로 저장이 되면 cpp compiler가 사용됩니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.