게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
프로그래밍 언어 공부 방법에 대한 잡생각 C언어 static..
게시물ID : computer_49805짧은주소 복사하기
작성자 : 상상속동물
추천 : 1
조회수 : 712회
댓글수 : 3개
등록시간 : 2012/06/13 02:46:43
심심해서 게시판을 훑어보다가 static에 대한 얘기를 보고 

잡생각을 써봅니다. 
아래 글은 제가 본 글에 어떤 분이 적어놓은 댓글을 가져왔습니다.

///////////////////////////// ///////////////////////////////////
1. static 의 scope
1.1 static 을 전역 변수에 사용할때 -> file 내부로 scope 가 제한됩니다. 일반적인 전역 변수는 extern 을 이용해서 다른 파일에서 불러다 사용할 수 있지만, static 으로 선언되면 그렇게 못합니다.
1.2. static 을 로컬 변수로 사용할때 -> 일반 변수와 동일합니다.

2. static 의 동작
1.1 static 을 전역 변수에 사용할때 -> 일반 전역 변수와 동일합니다.
1.2 static 을 로컬 변수에 사용할때 -> 함수가 호출되면 1회에 한해서 초기화 됩니다. 그리고, 이 변수는 함수로 종료되어서 메모리를 반납하지 않고, 계속 사용합니다.
//////////////////////////////////////////////////////////////////////////



////////////예문 //////////////////

main ()
{
printf("ret =%d\n", foo());
printf("ret =%d\n", foo());
return;
}

int foo()
{
static int a = 1;
a++;
return a;
}

위 글을 읽고 아래 예문의 결과를 예측해보면
첫 번째 printf에서는 2가 출력되고 세 번째는 3이 출력되겠죠.  

왜냐면 static 변수인 a는 두 번째 foo()에서 초기화되지 않는다고 하니까요.
하지만 이것은 그럴 수도, 혹은 아닐 수도 있습니다.

여러분이 사용하는 C언어 컴파일러는 보통 visual studio에 포함된 MS사의 것이겠죠?
만약 컴파일 시에 옵션으로 어떤 컴파일러 임의의 수정도 불가할 경우, 
결과는 둘다 2가 될 수도 있습니다.

이것은 static이란 키워드가 파일범위나 전역범위 같은 다양한 범위지칭으로 사람들을 혼돈에 빠트리는 것처럼, 실제로 우리가 작성한 c언어가 어떤 식으로 컴파일러에 의해 번역되고 CPU에 의해 수행되는지 더 이상 가르쳐주지 않기 때문에 생기는 혼돈입니다.

원리를 통한 사고로서 결과를 유추하는 것이 아니라, 
결과를 통해 과정을 명제로 만들어버린 것이라고 생각합니다.


실제로 프로그래밍 언어가 어떻게 동작하는지 한번이라도 제대로 공부하거나 가르쳐준다면
더 좋지 않을까 생각합니다. 

프로그래밍을 처음 배울 때는 더 어려울 수 있으나 
기본 원리에 대한 통찰은 앞으로 배울 모든 언어에 적용되기 때문입니다. 

이것은 제가 프로그래밍을 시작한지 10년
그리고 수박 껍질같은 언어를 쪼개고 내부 원리와 시스템에 대해 공부하고 
조금이나마 통찰력이 생겼다는 생각이 들고 후배들을 볼 때 늘 하는 생각입니다.


전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호