C에서 static variable과 static function의 차이를 알고싶습니다.
글쓴이: dlffjddlek00 / 작성시간: 월, 2019/04/01 - 2:37오후
명확하게 질문하자면, static variable의 경우 해당 variable의 pointer를 써도 다른 file에서는 access할 수 없지만
static function의 경우 function pointer를 통해 다른 file에서도 접근할 수 있다고 배웠습니다.
도대체 그 이유가 무엇인가요? variable과 function이 memory 상에서 어떻게 다르게 저장되기 때문에 이런 일이 발생하는지 궁금합니다.
Forums:
Quote:static variable의 경우 해당
아닙니다
이건 맞습니다.
엄밀히 따져보면 복잡하긴 할 텐데... 일단 storage duration을 넘기지만 않았으면 포인터를 들고 가서 참조하는 건 문제가 없어요. 같은 주소공간 안이라면 말이죠.
혹시나 해서 여쭙습니다만 말씀하시는 file이
혹시나 해서 여쭙습니다만 말씀하시는 file이 source file, 그러니까 translation unit 말씀하시는 거 맞죠?
네 맞습니다!
program 내의 single source file을 말하는 것입니다. 그런데 static variable을 다른 file에서 접근할 수 있나요?
접근 하려고 하면 error가 나지 않나요?
직접 해 보면 금방 알 수 있지요
직접 해 보면 금방 알 수 있지요
main.c:
other.h:
other.c:
빌드 환경: x86_64, Ubuntu 16.04.6 LTS, gcc (GCC) 8.2.0
빌드 명령어: gcc -std=c99 -pedantic -pedantic-errors main.c other.c -o static_test
경고/에러 없음. 실행 결과:
Any problem?
감사합니다!
직접 프로그래밍을 하기 어려운 환경에 있어서 해보지 않고 질문한 점 죄송합니다ㅠㅠㅠ
제가 책을 완전히 오독한 것 같습니다! static function을 다른 file에서 access할 때 당연히 헤더파일로 prototype을 줘야 하는 건데, 책에는 자세한 설명없이 "function pointer을 쓰면 다른 file에서도 access할 수 있다"라고만 나와있고 static variable 부분에서는 아무 언급도 없어서 저는 variable과 다르게 function의 경우에는 prototype을 주지 않고도 access할 수 있다고 생각한 것 같습니다.
정말 귀찮으셨을텐데 이렇게 답변해주셔서 감사합니다!
그리고.. 가능하다면 하나만 더 답변해주실 수 있을까요? storage duration을 넘기지만 않았으면 pointer를 사용한 접근은 문제 없다고 하셨는데, scope rule도 영향을 끼치지 않나요? block scope인 variable에 대한 block 바깥에서의 pointer 접근은 불가능하지 않나요?
storage duration이 바로 그런 것을
storage duration이 바로 그런 것을 말하는 것입니다.
이게 이렇게 긴 질문과 긴 답변이 필요한 주제인지
이게 이렇게 긴 질문과 긴 답변이 필요한 주제인지 호기심이 생기네요.
static variable 의 포인터를 다른 파일의 함수에서 참조할 수 없다면, printf() 로 문자열 출력하는 것 조차도 불가능합니다.
댓글 달기