Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[질문] 이둘의 차이를 아시는 분 (static 관련)

563 views
Skip to first unread message

kimwida

unread,
Jun 14, 2000, 3:00:00 AM6/14/00
to
static void func(); void func();
main() main()
{ {
..... ......
} 와 }


차이점이 몰까요?

저는 참고로 이렇게 알고 있는데 맞는지 몰라서 질문합니다.
첫번째에서의 func()은 다른 화일에서는 참조 안된다.
두번째에서의 func()은 다른 화일에서도 참조 된다.

이것말고도 다른 차이점이 있으면 설명좀 해 주세요...
감사합니다.


Ahn Ki-yung

unread,
Jun 14, 2000, 3:00:00 AM6/14/00
to
kimwida wrote:

다른 차이점은 없습니다.


황보현

unread,
Jun 15, 2000, 3:00:00 AM6/15/00
to
함수를 선언할 때는 static의 의미가 없습니다.
정의할 때 static을 사용할 경우에는 차이가 발생을 하지요.

귀하의 프로그램에서 func()가 동일한 소스파일안에서 정의가 되지
않으면 선언에 static을 주는 것은 의미가 없다는 것이지요.

굳이 차이점을 든다면 컴파일할 때 warning이 나올 것입니다.
prog.c:1: warning: `func' declared `static' but never defined


함수의 정의에 static을 사용하면 func라는 함수명이
동일한 소스 파일에서만 사용이 가능하다는 것이지요.

이는 func라는 이름을 컴파일러가 오브젝트 파일의
relocation 정보에 기록하지 않는 다는 것이지요.
오브젝트끼리 링크가 되지 않게 되지요.

컴파일만하고 nm 명령으로 확인해보면 static을 사용하는 것과
하지 않는 것의 차이점이 나타납니다.

그렇다고 하더라도 static 함수를 타 소스에서 사용이 불가능한
것은 아닙니다. func라는 이름만을 사용할 수 없다는 것이지요.
다른 외부 함수 포인터 변수를 사용하여 전달만 된다면
그 함수를 사용할 수가 있습니다.

컴파일과 링크및 로더에 대해 공부를 해보시면
더 상세히 이해하실 수 있습니다.

--
황보현

http://www.itplus.co.kr/newhome/etc/job.html
news://news.itplus.co.kr/itadvisor.java
news://news.itplus.co.kr/itadvisor.news

kimwida <kim...@yahoo.co.kr>이(가) 아래 메시지를
news:8i7gdm$cpa$1...@news2.kornet.net에 게시하였습니다.

Gyujin Han

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to

황보현 이(가) <65V15.604$XU4....@news2.bora.net> 메시지에서
작성하였습니다...

>함수를 선언할 때는 static의 의미가 없습니다.
>정의할 때 static을 사용할 경우에는 차이가 발생을 하지요.
>
>귀하의 프로그램에서 func()가 동일한 소스파일안에서 정의가 되지
>않으면 선언에 static을 주는 것은 의미가 없다는 것이지요.
>
>굳이 차이점을 든다면 컴파일할 때 warning이 나올 것입니다.
>prog.c:1: warning: `func' declared `static' but never defined
>

굳이 드신 차이점이 func라는 같은 이름의 외부함수가 존재할 경우에는 그 의미가
아주 커지지요.
static void func();
라고 "선언"해 주면, 그 translation unit안에 func라는 이름의 함수가
"정의"되어 있지 않는 경우 위와 같은 경고를 출력하겠지만......
void func();
라고 '선언'해 주면 그 외부 함수를 "조용"하게 연결해 주지요.
외부함수와는 연결하면 않된다라고 명시적으로 나타내고 싶을 때 굳이 static으로
"선언"해 줍니다.


0 new messages