프로그래밍/c언어

사사밍의 c언어기초강좌 4강:코드 살펴보기!

사사밍 2015. 11. 27. 00:15

사사밍의 c언어기초강좌 4강:코드 살펴보기!

안녕하세요 사사밍입니다

 오늘의 내용은 저번에 예고 헀듯이 저번 강좌에서 작성한 코드에 내용을 알아보고 분석하는 시간입니다

사람에 따라 다소 어려울수 있는부분이니 천천히 읽어가시면서 이해하시면 되실거 같습니다.

---------------------------------------목차-------------------------------------

 1.코드 살펴보기


  2.함수가 뭐길래!


---------------------------------------------------------------------------------


 

1.비주얼 스튜디오 설치해보자!


저번강좌에서 비주얼 스튜디오를 설치하고 그뒤에 설치완료를 확인하기위한 간단한 코드 작성을 해보았죠?



이러한 내용을 가진 코드였죠 그러나 여러분은 아직 이내용에 대해 이해를 할수없습니다.

처음 배우는 내용이기에 약간은 복잡하고 난해한 내용일수 있으니 가벼운 마음으로 문장들에 호기심을 가지고 접근하시는걸 추천드립니다.



위코드의 실행 결과였습니다.
그러면 이제 우리는 추리를 해야만 합니다 "위코드와 이 결과물은 어떤 관계를 맺고있는가!" 물론  보통은 결과물을 가지고만 과정을 찾기란
어렵기 마련이죠 그러나 우리는 여기서 분명해보이는 공통점하나를 찾을수있습니다.
코드의 5번쨰 줄 printf("hello c \n); 과 실행결과의 hello c 이것으로 우리가 유추해낼수 있는내용은..
간단합니다. 아! 우리는 printf의 ()의 ""안에 들어가는 내용을 출력해 낼수있구나!
이내용을 검증하기위해서는 정말 간단한 방법이 있죠.

직접 수정해보면 되는일입니다.

저희가 추리한 내용이 틀리 않았다면 printf("")안에 내용을 바꾸면 그내용이 출력되야 겠죠.



예상대로 출력이 되었습니다.

그렇다면 다음으로 궁금해지는것이 있겠죠.. 저는 ""를 한번 뺴보고 싶어지네요




"" 큰따음표를 뺸 printf에서는 문법에 맞지않는 내용 이라는 오류와함께 컴파일이 불가능합니다.
그렇다면 마지막으로 \n은 무엇인가.. 이것도 간단합니다. 지워보면 알겠죠 뭐.


\n을 지워도 컴파일 과정에는 문제가 없네요 그러나 실행결과가 약간 달라져있네요
\n은 줄개행의 역활을 한다는것을 알수있습니다.

이것으로 우리는 printf의 사용법을 약간 익힐수 있게 되었습니다.
1.내용을 정리해보자면 printf의 ()의 ""큰따음표 안의 내용이 출력된다
 2.끈따음표가 없다면 내용은 출력이 되지않고 오류를 범하게 된다.
3.\n은 문자의 출력 유무에는 영향을 미치지 않으나 줄의 개행을 맡는다.
저희가 알게된것은 이렇게 세가지 내용을 알게되었습니다. 시작한 지식은0이였기에 이정도 사용법을 안것이라면 굉장하다고 생각되네요
그러나 이사용법들은 응용되지 못하면 아무 쓸떄없는 것들에 불과한 것들이겠죠?
그렇다면 이번에는 여기서 얻은 내용들을 통해 좀더 응용해봅시다
printf를 사용하여 이름,나이,별명을 출력해봅시다.
그러나 약간의 규칙이 있습니다 각 내용들은 한줄에 써지면 안되며 전부 개행되여야한다

흠... 이건 어떨까요?  우리가 알아낸 내용을 생각해보면 아마 이 코드의 실행결과는

[이름:sasaming나이:00별명:사사밍]  이되버리겠지요 저희가 바라던 결과와는 다른 내용입니다


printf를 여러번 사용해보는건 어떨까요?

좋은 발상입니다만 결과는 유감이네요 printf를 여러번 사용한다하여 줄의 개행은 이루어지지 않는것 같네요.



방법은 생각보다 간단한듯 하네요 줄의 개행을 이루어주는 \n 을 번복해서 사용하는것 입니다.


어떠신가요? 이제 printf의 사용법을 잘아신다고 자부하실수 있으실듯 하신가요?

그러나 우리는 아직 약간의 ''사용법' 과 구조에대하여 알게되었을뿐 본질에대해서는 아직 알길이 없습니다.

우리가 그것을 알기위해서는 c언어에서의 함수 를 약간 들여다보아야 할 필요성이 있는듯 합니다.


2.함수가 뭐길래!


복잡한 printf를 어느정도 꺠우친듯 느끼게 되었는데 도대체 함수가 무엇이길래 본질이니 뭐니 하는걸까요?\

x+2=y

어릴적 자주 보았을법한 느낌의 익숙한 식입니다.
한번 x값을 2로 대입해볼까요?

y는 4가 됩니다.


그럼 c언어와 좀더 연관지어 설명해볼까요?
c언어에서는 x에 값을 대입하는것을 값의 입력이라고 불릅니다 또한 x를 대입함에 y값이 나오게 되는 과정을 값의 출력이라고 부릅니다.
그리고 이렇듯 값의 입력에 따라 출력이 있는 덩어리들을 함수라고 칭하게 되는것이죠

쉽게 생각해서 함수를 꽂으면 실행되는 '덩어리'정도로 생각해주세요
함수의 호출 이란 이덩어리를 불르는 행위, 또한 인자를 전달한다는것은 덩어리안에 입력(주입)하는 입력값(위의 내용에선 x의값)

그렇다면 이러한 함수는 우리가 공부한 코드의 도대체 어느부분에 있는것인가?

일단 코드의 3번쨰 줄 int main(void)를 살펴봅시다

int main(void)

이것의 내용은 출력의 형태 함수의 이름 입력의 형태를 나누어둔 것입니다.
int는 출력형태 main은 함수의 이름 void 는 입력의 형태를 뜻합니다.
(이내용에 대해서는 아직은 이해를 필요로 하지 않습니다. 그저 대충 이런 형태로 이루어져있구나 하고 위치만 파악해두시면 됩니다.)
그렇다면 
int main(void)다음의 중괄호{}는 무엇인가? 이것이 바로 함수의 기능입니다.
우리가 작성한 main함수의 기능은 cute sasaming을 출력하는 기능이였죠
이러한 중괄호를 포함한 내용을 함수의 몸체라고 부릅니다
{
printf("cute sasaming")
return 0; 
}

그렇다면 또하나의 함수는 무엇일까?  정체는 우리가 위에서 주구장창 다뤘던 printf 아니 printf함수 이다.
너도 함수였다니.. 라며 배신감을 느낄 필요는 없다 우리의 무지의 잘못이다.(농담)
printf("hello c");

 우리가 위에서 공부한 함수와는 약간 다르게 생긴듯하다. 그러나 엄연한 '함수'이다

위에서 공부한 내용을 통해 우리의 공부방법인 추측을 통해 printf의 함수를 공부해보자

우리가 아는 함수는 분명 출력형태 함수이름 입력행태 함수의 몸체를 지니고 있어야한다. 그러나 이놈은 뭔가 아닌듯하다
아마 이놈은 본체가 아닌듯하다. 분명 어디선가 printf의 함수를 불러오는것일거다!  그러나 우리의 레벨로는 아직 도달할수없는 단계이다(웃음)
그러나 본체가 아니라고해도 본체에 전달할 내용을 우리에게로부터 받아야만 할것이다!
그것이 "hello c"인것이다.
즉 hello c를 인자로써 전달하면서 printf라는 함수를 호출하는 문장이였던 것이다!

어라..? 뭔가 의문이 생긴다 우리는 분명 printf라는 함수를 만든적이없다 큰따음표 안에 작성한 문자를 출력해주는 기능을 만든적도 없다
도대체 어디서 printf 함수를 호출하는 것인가! 있지도 않은 것을 불러올수는 없는법 분명 존재는 할것이다
이러한 존재들을 우리는 표준함수 라고 칭한다. 
이함수들은 고맙게도 C언어에 기본적으로 제공되어있는 함수들로 그렇기에 우리가 만들지도 않은 함수를 사용할수 있었던것이다.
그러나 이 표준함수인 printf 함수를 사용하기위해서는 그저 작성만 해서는 사용할수없다!
코드의 맨첫줄을 살펴보자 #inlcude<stdio.h> 이것을 헤더파일 선언이라고 하는데 우리가 사용하는 printf 함수에 필요한 정보들을
담고있는 것이라는 정도만 이해를 하는것이 바람직하다. 아직은 깊게 알려하지말아라 다칠것이다!.
또한 이선언은 main함수를 작성하기 전에 선언해야만 한다.




이렇게 c언어 강좌 4강이 끝났다..
어쨰 좀더 쉽게 설명할수있는 내용을 너무 어렵고 난해하게 풀어해친듯해서 미안한 마음이 든다..
그리고 읽다보면 점점 반말로 바뀌어가는 기분이 든다면 기분탓이니 넘어가 주길바란다.(사실은 추워서 머리가 이상해졌다한다.)
다음 강좌에서는 이코드에서 아직 알아내지못한 문장끝에 붙는 ;세미콜론에대한 내용과 return 문에대하여 알아보도록 하겠다.

추운날씨 다들 몸조심하세요 이만 사사밍은 가볼게요~