본문 바로가기
Ghost의 C Note(노트)/Ghost의 C언어 변수에 관한 오류들

Ghost의 변수에 관한 오류들...

by dark ghost 2016. 7. 7.
728x90
반응형

Ghost의 변수에 관한 오류들~~

오랜만에 포스팅을 하네요... ㅎㅎ

이게 정말 얼마만인지...

얼마나 오래 되었으면 기억이 가물가물...

오래전에 제가 오류들에 대해서

포스팅을 했었는데요.. 이번엔 오류들을

나누어서 포스팅을 할려고 해요...

그림 1) 선언되지 않은 식별자~~~

그럼 먼저 그림 1)에서 생기는 오류가 왜 생기는지..

먼저 볼께용~~~  그림 1)에 보시면 빨간 네모와

파란 네모가 보이시나요?

먼저 왜 이런 오류들이 생길까요?

이런 질문을 드린다면.. 아마도 이거 머지...

라고 하실 것도 같지만.. ㅎㅎ

그래도 먼저 드려 볼께요...

 

그림 2) 선언되지 않은 변수들...

맞추신 분들이 계시나요?~~~

맞습니다용... 그림 2)에서 볼 수 있듯이 변수

등록 되지 않으면 생기는 오류네요...

하지만 반드시 변수등록이 안되서 생기는 문제가

아닐때도 있는데 그때는 변수위치를 찾지 못해서

생길수도 있네요.....

그림 3) 선언되지 않은 변수?

그럼 그림3)에서 달라진 부분이 보이시나요?

이미 예상하고 계신 분들은 대단하시네요... ㅎㅎ

맞습니다.. 선언 되지 않은 식별자가 줄어들었죵.....

그럼 이번에도 역시 변수 선언이 안되서

그런 걸까요?

그림 4) 역시 선언 되지 않은 변수 변수명은 뭘까요?

맞추셨나요? 우와~~~

대단하시네요... 역시 대박 프로그래머

능력이 풀~풀~풀~ 넘치시는 분이시네요....

맞습니다. 이번에는 임의 적으로

하나변수만 선언 하지 않은채로 컴파일

해보았네요... 그럼 그 변수명이 무엇 인지까지 맞추셨나요?

딩동댕~~~ day라는 변수네요...

이제 변수가 없으면 어떻게 되시는지는

아시게 되었네요....

축하 드립니다..... ㅎㅎ 

그림 5) 초기화 되지 않은 지역 변수 무슨 말일까?

그럼 이번에 그림 5)에서 나오는 오류는 뭘까요?

(17) 라인초기화 되지 않은 지역 변수

사용했다고 경고를 하고 있네요...

그림 6) 엔퍼센트가 없는 변수

그림 5)에서의 오류가 무엇인지 답을 맞추신분

계시나요? 헐~~~

이미 왜 이런 질문을 받아야 해.. 라고 생각을

하고 계시는 건 아닌가요?

죄송 합니다용....

아무튼 원래대로 돌아와서

그림 5)에서 17번째 라인에 초기화 되지 않은

 지역 변수라는 경고를 보셨죠?

그림 6)에서 라인 번호가 보이시나요?

17번째 라인... 뭔가 다른 것을 느끼셨나요?

예~~ 입력하는 scanf 함수

'&(엔퍼센트)'가 없네요... 이 부분은

포인터와 비슷한 부분인데..

자세한건 스킾하구요....

scanf 함수에는 꼭 &(엔퍼센트)가 들어가야 되요..

간단하게 말하면요... 변수선언할때

메모리변수가 렌덤하게 할당을 받아 할당받은 

주소에 상주하게 되요.... 그래서 값을 입력

받을려면 선언된 변수메모리 주소를 찾아서

거기에 값을 넣어야 되는데 메모리 주소를

찾아가게 하는 것이 바로 &(엔퍼센트)에요...

그림 6)에 보시면 17번째 라인&(엔퍼센트)가

없는게 보이시죠? 그래서 초기화되지

않은 변수라고 경고를 하네요...

day변수주소를 찾아갈수 없어서요...

그림 7) 아무런 경고가 없는 컴파일 과연 문제가 없을까?

그림 7)은 컴파일을 했는데도 아무런 경고 메시지가 없네요...

그럼 제대로 코딩이 되었을까요?

그래서 이번에는 이 부분 만으로는 알수가 없기에

실행까지 시켜 봐야 알수가 있겠네요...

그림 8) 실행하고 보니 일을 출력이~~~

그림 8)에서 실행을 시켜보니 어~~~

뭔가 이상하네요... 이상한 부분이 보이시나요?

예~~~ 컴파일때는 아무런 이상이 없었는데

실행 시키고 보니 은 제대로 출력이 되는데..

이 이상한 숫자가 들어가 있네요....

이 들어간 숫자는 과연 무었일까요?

퀴즈가 정말 많네요... ㅎㅎ

그림 9) printf에 &가 붙은 변수가~~~

드디어 퀴즈의 답을 알아볼 시간이 됐네요...

문제는  20번 라인에 printf 함수

있는데요... 보시면 아시겠지만 변수명 중에

유독 남다르게 생긴 변수명이 있죠?

맞습니다~~ 맞구요~~~

&day라는 변수요....

printf함수에는 &를 쓰면 안되요....

이유는 함수의 기능때문이기도 한데요..

먼저 scanf 함수는 입력을 받는

함수이구요...

printf 함수출력할때 쓰는 함수에요...

그렇기 때문에 입력을 받을때는 값이

들어가는 변수의 주소를 알아야 하기 때문에

&를 쓰구요... printf 함수

출력을 위해 쓰는 함수이기에 변수에 들어있는

을 가져 오기만 하면 되요...

그런데 &메모리 주소를 찾아간다고

했잖아요... 그래서 7자리의 숫자가 출력

되었고 7자리가 뜬건 앞자리 숫자가

0이어서 7자리만 출력을 한거네요....

이렇게 긴 포스팅을 끝까지

읽어 주셔서 감사하구요....

언제가 될지는 모르겠지만 한 번 메모리에

관해서 포스팅을 해보고 싶네요...

 

다들 수고 많으셨습니다.... ^^

 

 

 

 

 

728x90
반응형

댓글