[C] 헤더파일 include에서 이상합니다.
글쓴이: toy / 작성시간: 목, 2004/07/29 - 6:20오전
head.h , a.c , b.c 3 파일을 만들었고 a.c 와 b.c에서 head.h를 include합니다.
그런데 이상한것은.. head.h에서 int aaa ; 하면 에러가 안나고 int aaa=123하면 에러가 납니다.
왜 그럴까요......... :oops: :oops: :oops:
head.h ------------------------
#ifndef AAA
#define AAA
int aaa;
//int aaa=123 ; // error!!
#endif
-------------------------------
a.c ----------------------------
#include "head.h"
void fff1()
{
printf("%d\n", aaa);
}
--------------------------------
b.c ----------------------------
#include "head.h"
void fff2()
{
printf("%d\n", aaa);
}
void main()
{
fff1() ;
fff2();
}
--------------------------------
Forums:
전역변수 aaa가 두번정의되는 셈이니 에러가 날 수 밖에 없습니다.
전역변수 aaa가 두번정의되는 셈이니 에러가 날 수 밖에 없습니다.
head.h
extern int aaa;
a.c
int aaa=123;
같은 식으로 사용하면 됩니다.
head.h에서는 aaa가 int라는것만 알려주고 변수정의는 a.c에서 하는거죠.
목적이 전역변수 aaa가 아니라 123이라는 값이라면
head.h에
#define aaa 123
이렇게 사용하는 편이 좋습니다.
잘이해가 안되서 그러는데요...아래와 같은 매크로가 있으니까 한번번
잘이해가 안되서 그러는데요...
아래와 같은 매크로가 있으니까 한번번 include되야하는것아닌지요..
#ifndef AAA
#define AAA
#endif
초기값을 주지 않은것은 왜 에러가 나지 않았을까요... :oops: :oops:
a.c와 b.c는 같은 번역단위에 속하지 않습니다.정확하진 않지만 개
a.c와 b.c는 같은 번역단위에 속하지 않습니다.
정확하진 않지만 개략적으로 설명을 하면
과 같이 진행된다고 생각해보세요.
저 include guard은 소용이 없습니다.
head.h에선 extern으로 선언하시고 a.c나 b.c에서 int a=123이라고 정의하세요.
그리고 int main()이고 printf의 prototype이 보이지 않습니다.
테스트하실 때도 신경써주세요. *_*
댓글 달기