PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/10/18 12:55:57
Name AriENai
Subject C언어 간단한 질문 하나 드립니다.
C언어를 막 배우기 시작해서.. 어렵네요 @@

외부 전역변수를 알리는 extern 이라는 키워드가 이해가 잘 가지 않아서 질문 드립니다.
// main.c
#include "numberguess.h"

int number = 0;

int main(void)
{
        int guess = 0;

        setNumber();
        printHead();
        while (scanf("%d", &guess))
        {
                if (guess < number)
                        printHigher(guess);
                else if (guess > number)
                        printLower(guess);
                else
                {
                        printAnswer();
                        break;
                }
        }
}


// func.c
#include "numberguess.h"

static int max = LIMIT;
static int min = 1;

void setNumber()
{
        int seed;
        extern number;

        seed = time(NULL);
        srand(seed);
        number = rand() % LIMIT + 1;
}

void printHead()
{
        printf("1에서 %d까지의 하나의 정수가 결정되었습니다.\n", LIMIT);
        printf("이 정수를 맞추어 보세요? > ");
}

void printHigher(int guess)
{
        printf("\n맞추어야 할 정수가 입력한 정수 %d보다 큽니다\n", guess);
        min = guess + 1;
        printf("%d에서 %d사이의 정수를 다시 입력하세요. > ", min, max);
}

void printLower(int guess)
{
        printf("\n맞추어야 할 정수가 입력한 정수 %d보다 작습니다\n", guess);
        max = guess - 1;
        printf("%d에서 %d사이의 정수를 다시 입력 하세요. > ", min, max);
}

void printAnswer()
{
        //extern number;

        printf("\n축하합니다 정답은 %d입니다.\n", number);
}

소스 파일의 내용은 이런데요..(파일 2개)//
extern이라는 키워드는 정의된 파일 내부에서 외부변수를 끌어다 쓸 수 있게 하는 걸로 압니다.
그런데 func.c의 printAnswer 함수 구현 부분에서 extern number; 를 주석처리하면 왜 에러가 날까요??
setNumber 함수 구현부분에서 분명 정의를 했는데 말이죠.
책을 뒤져보고는 있는데.. 잘 모르겠네요 도와주세요 ㅜ_ㅜ

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
정신놓은너구
09/10/18 13:05
수정 아이콘
extern 키워드는, 컴파일러에게 다른 c 파일에 선언된 전역변수를 이 c 파일을 컴파일할 때에도 가져다 쓰겠다...(설명이 좀 이상하지만;;)라는 이야기입니다. 따라서 함수 내부가 아닌 func.c 함수 위에 보면 static 으로 전역변수 선언하신 부분에 extern int number 가 들어가야 하구요.

extern number; 만 하신 경우 컴파일러는 이 변수가 어떤 형식인지 알 길이 없으므로, extern [타입] [변수명] 으로 써주시면 되겠습니다.
09/10/18 13:19
수정 아이콘
정신놓은너구리 님 //
소스파일은 책에 있는 그대로 배껴서 적은건데..
extern number; 만 하면 다른 c파일에 선언된 전역변수의 형식을 그대로 따르지 않나요?? (그런 원리가 아닌가요 ;;;)
함수 내부에서 extern 을 쓰면.. 이 c파일 내부가 아닌 함수 내에서만 사용가능한건가요? 으음..ㅜ_ㅜ
09/10/18 13:19
수정 아이콘
옛날에 아무것도 안 붙여놓으면 기본 int형이었기 때문에 또 가능할지도 모르겠네요. 질문하신건 scope 룰에 의한 겁니다. printAnswer에서 쓰고 싶으면 printAnswer에서 접근할 수 있도록 해야하죠. setNumber안에서 쓰겠다고 한 걸 printAnswer에서는 쓸 수 없어요.
09/10/18 13:30
수정 아이콘
kcm1700 님 //
아, 역시 그렇게 되는건가요??
책에 extern의 범위는 정의된 파일 내 라고 되있길래..
정리하면..
extern을 전역변수를 선언하는 에 사용하면 해당 파일에는 어디든지 쓸 수 있고..
extern을 함수 내부에서 사용하면 그 함수에서만 사용할 수 있다는 거죠??
또 어디서 extern [변수]; 를 사용하든지 [변수]는 항상 전역변수 이고요?
큐리스
09/10/18 15:03
수정 아이콘
extern과는 별 상관 없는 scope 문제인데요.
어찌보면 좀 당연하다 싶은 내용이라서 설명하기가 어렵네요.
내에 변수를 정의, 선언하셨으면 그 안에서만 유효합니다. (이게 잘 요약한 건지는 약간 불안하긴 합니다만...)
extern도
안에서만 유효하니까 밖에서는 알 수가 없다는 게 요점입니다.
안이 아니라 파일 첫머리에 두시면 파일 전체 내에서 유효해질 겁니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
66016 [헬스] 공백기 관련 질문입니다. [1] 육식코끼리1745 09/10/18 1745
66014 정치학 공부하다가 궁금한게 있네요. 국회 해산권과 내각불신임권에 관하여... [1] 래토닝3563 09/10/18 3563
66013 한국교총에 대해서 [1] SaiNT1729 09/10/18 1729
66012 천하무적야구단 촬영상대팀 질문있습니다~ [7] 너만을사랑해2158 09/10/18 2158
66010 일본 전국시대 역사 관련 책 부탁드립니다. Kyrie_KNOT1584 09/10/18 1584
66009 Visual C++ 6.0이 이상해요; [4] Valueinvester2331 09/10/18 2331
66008 나이키 조던 신발 많이 파는 사이트좀 가르쳐주세요.. 쏘울2430 09/10/18 2430
66007 옷과 코디 질문입니다 [2] 다레니안1919 09/10/18 1919
66006 거시적 사회복지와 미시적 사회복지는 무엇인가요? [1] army2656 09/10/18 2656
66005 계속되는 윈도우 업데이트로 용량이 부족합니다 [5] 뜨거운눈물2917 09/10/18 2917
66004 무료백신 추천 [12] Ggobugi2290 09/10/18 2290
66003 자동차 사고 관련 질문입니다.. [2] 칼릭1654 09/10/18 1654
66002 내장하드 인식문제.. [4] 큭큭나당2117 09/10/18 2117
66001 (뻘질문) 김연아 선수 경기를 보고 [4] 유나얼2134 09/10/18 2134
66000 친구 결혼 선물 어떤 게 좋을까요 [4] 빵pro점쟁이2081 09/10/18 2081
65999 zerg vs protoss 일반적인 빌드 질문. [1] 살찐개미1465 09/10/18 1465
65998 C언어 간단한 질문 하나 드립니다. [5] AriENai2311 09/10/18 2311
65997 윈도우 종료시 프로그램 자동 종료되게 하는 방법은? [3] 라이시륜2129 09/10/18 2129
65996 변호사에 대해서 궁금합니다. [3] 제시카와치토1828 09/10/18 1828
65995 나이키 테니스화를 찾고 있습니다. + (상의)블레이져 코디. [5] Someday2317 09/10/18 2317
65994 자바쪽이나 웹프로그래머 쪽에 종사하시는분들께 질문 드립니다^^ [4] 카스트로폴리1568 09/10/18 1568
65993 뮤탈컨트롤(뮤짤)에 대한 질문입니다. (질게,겜게에서 검색을 해보았으나 제가 원하는 답변이 없어서 물어봅니다) [4] 제시카와치토2162 09/10/18 2162
65992 백분토론 군가산점문제를 보고 법률관계자분들께 질문 있습니다. 라울2152 09/10/18 2152
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로