[질문]
static 변수를 다른 파일에서 쓸 수 있는 이유?
익명(222.164)
2020-08-02 14:19
추천 0
유닉스 소켓 공부하다가 의문이 생김.
<arpa/inet.h> 헤더 보면 inet_ntoa()라고 네트워크 바이트 (struct in_addr)를
argument로 받아서 IP 주소로 바꿔서 string으로 리턴하는 함수가 있거든.
예) 127.0.0.1
char buf
[] = "127.0.0.1";
이런 식임.
내가 궁금해한 게 char 포인터를 리턴하는데 왜 free를 안 하냐는 거지.
그래서 소스코드 봤는데 이런 식으로 되어있었음.
static __thread
char buffer
[18];
char *
inet_ntoa
(struct in_addr in
)
{
unsigned char *bytes
= (unsigned char *) &in
;
__snprintf
(buffer
, sizeof (buffer
), "%d.%d.%d.%d",
bytes
[0], bytes
[1], bytes
[2], bytes
[3]);
return buffer
;
}
궁금해서 내가 따로 두 개의 다른 파일을 만들어서 한 파일이
다른 파일에서 리턴된 static 변수를 쓸 수 있는지 실험해봤거든.
이런 식으로,
#include "foo.h"
static char buf
[256];
char *create_buf(void)
{
return buf
;
}
그리고 이 함수를 다른 파일에서 불러서 써봤는데 되러라.
#include "foo.h"
#include <stdio.h>
int main(void)
{
char *buf
= create_buf();
fgets(buf
, 256, stdin);
printf("%s", buf
);
}
그래서 내가 추측한 게
static이 file scope이라 직접적으로 변수를 접근할 순 없지만 internal linkage라 같은 translation unit 에서는 쓸 수 있다
라고 생각하는데, 맞음?
포인터를 줬는데 당연히 되지. 님 코드는 링크과정이랑 상관 없는것 같은데? - dc App
그렇구나