달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

02-1)   Hello world! 들여다보기


책 앞에있는 Hello world예제를 통해 간단하게 실습하였고 그 코드를 통해  이 문장이 의미하는바가 무엇일까? 생각해보기로했다.

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

<Hello.c>

#include <stdio.h>

int main(void)

{

printf("Hello world! \n");

return 0;

}

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


<c언어의 기본 단위인 '함수'의 이해>


기억하자 "C언어는 함수로 시작해서 함수로 끝난다!!"

C언어로 프로그램을 작성한다는건 함수를 만들고, 만든 함수들의 실행순서를 결정하는 것이다 


C언어에서는 삽입되는 값을 '입력'이라고 하고 그 결과로 얻게되는 값을 '출력'이라고 한다. 

그리고 적절한 입력과 그에 따른 출력이 존재하는 것을 가리켜  '함수(function)'라고 한다


C언어에서 함수와 관련해서 사용되는 용어 몇가지를 정리하자면


-함수의 정의 : 만들어진 함수, 실행이 가능한 함수를 일컫음

-함수의 호출 : 함수의 실행을 명령하는 행위

-인자의 전달 : 함수의 실행을 명령할 때 전달하는 입력 값 


예를 들어 3X+4=Y 라는 함수가 있을때 


보이는 것이 함수의 '정의'이고, 이 함수의 호출을 위해 X에 전달되는 값이 '인자'가 된다.

따라서 인자의 전달은 함수의 호출과정에서 동시에 발생한다고 볼 수 있다.


<예제 Hello.c에서의 함수는 어디에?>


위에서 얘기했지만 c프로그램은 함수로 시작해서 함수로 끝난다.

즉, 정해진 순서에 의해서 진행되는 함수의 호출이 바로 프로그램의 흐름이 되는 것이다.


제일 먼저 호출되는 함수는 무엇일까??--> 바로 main이라는 이름의 함수이다. 

프로그램이 시작되자마자 컴퓨터는 main이라는 이름의 함수를 찾아서 호출을 한다. 

따라서 C언어로 구현된 모든 프로그램에는 Main이라는 이름의 함수가 정의되어야 한다. 


Hello.c예제를 보면 이 예제의 main 함수는 다음과 같이 시작한다.


int main (void)


이것이 의미하는건 다음과 같다.

"출력의 형태가 int이고 입력의 형태가 void인 main이라는 이름의 함수"


함수의 특성(입력형태, 출력형태 그리고 함수이름)만 정의했다고 해서 함수가 되는 것은 아니다.

함수는 기능을 지녀야한다. c언어에서는 그 기능은 중괄호 안에 표현이 된다. 

즉 main함수의 기능은 다음과 같다. 

.  int main(void)

{

printf("Hello world! \n");

return 0;

}


중괄호 내부에 두 개의 문장으로 이루어져 있는데 순차적으로 실행되고 문장의 수에 상관없이 위에서 아래로 순차적으로 실행이 된다.

그리고 이렇게 함수의 기능을 정의하고 있는 영역을 가리켜 '함수의 몸체(body)'라고 한다. 


그리고 '출력형태'라는 표현은 함수임을 강조할 때 사용이 되며 실제로는 반환형(return type)이라는 표현이 주로 사용된다.


함수 내에 존재하는 문장의 끝에는 세미콜론 문자 ;를 붙여준다.


그런데 모든 문장에 세미콜론이 붙는 것은 아니다. 

(조건문이나 반복문과 같은 컨트롤 문장등에는 붙지 않는다. )


<표준 라이브러리와 printf함수>


printf("Hello world! \n"); 

함수의 호출문에서 소괄호 안에는 함수호출 시 전달할 인자정보를 표현한다. 그리고 C언어는 큰따옴표를 이용해 문자열을 표현한다.

즉 위 문장은 "Hello world! \n"을 인자로 전달하면서 print라는 이름의 함수를 호출하는 문장이다.

( 큰따옴표로 표현되는 문자열 안에는 특수한 의미의 문자를 삽입할 수 있다. \n도 그런 특수문자 중 하나이다. 

  \n은 줄을 바꾸라는(개행)의 의미다.  줄바꿈 이라는 것만 기억하기!) 


근데 여기서 printf라는 함수를 만든적이 없는데 어떻게 호출할 수 있던 것일까?


'표준함수'란 기본적으로 제공되는 함수를 말하고, 이런 표준 함수들의 모임을 가리켜 '표준 라이브러리'라 한다. 


prinft함수는 함수호출 시 전달되는 문자열을 모니터에 출력하는 기능을 지니는 기본적으로 제공되는 함수이다. 




<헤더파일 선언의 필요성>


printf와 같은 표준함수의 호출을 위해서는 printf 함수와 관련 있는 '헤더파일 선언' 이라는 것을 해야한다. 


#include <stdio.h> <-- 이부분

int main(void)

{

printf("Hello world! \n");

return 0;

}


이는 stdio.h라는 확장자가 .h로 끝나는 헤더파일을 포함하라는 의미의 선언인데 

저 문장의 의미를 정리하자면 

"헤더파일 stdio.h에는 printf 함수의 호출에 필요한 정보가 존재한다. 따라서 이 파일의 정보를 포함하는 헤더파일 선언문이 삽입되어야한다. 


표준 라이브러리에는 다양한 표준 함수가 존재하기 때문에 헤더파일도 다양하게 존재한다.

그래서 필요에 따라서 여러 개의 헤더파일 선언문을 삽입하기도 한다. 



-printf함수의 호출을 위해서는 stdio.h를 대상으로 헤더파일 선언을 해야한다.

-헤더파일의 선언은 소스파일의 맨 앞 부분, main 함수 정의 이전에 와야한다.



<return은 함수의 종료와 값의 전달(반환)이라는 두 가지 의미를 지닌다.


위에 Hello.c 예제 마지막 문장

return=0;


이를 가리켜 return문이라 하는데, 이 문장이 지니는 두 가지 의미는 다음과 같다.

-함수를 호출한 영역으로 값을 전달(반환)

-현재 실행중인 함수의 종료 


따라서 Hello.c에서는 이 문장을 실행하면서 main함수를 호출한 영역으로 0을 전달한다. 그리고 함수를 빠져나온다.

그런데 main함수의 종료는 프로그램의 종료로 이어지기 때문에 결국 프로그램이 종료가 된다. 


0을 전달(반환)하는 이유는 무엇일까?

0은 프ㅗ그램의 종료상태를 알리는 용도로 사용된다. 보통 0은 정상적인 종료의 상황에서 전달하는 값이다.



02-2) 주석이 들어가야 완성된 프로그램


주석은 선택이 아닌 필수다! 

내가 작성한 코드를 분석하는데 배려하는 수단이다. 


C언어에서 주석을 다는 방식은 두가지가 있다.


하나는 블록단위 주석으로 주석의 시작과 끝을 명시하는 방식이다.

한 줄을 주석 처리하는데도 사용이 가능하고, 

/* 주석 처리 된 문장 */


두줄 이상을 주석 처리 하는데도 사용이  가능하다.

/* 

주석 처리 된 문장 1

주석 처리 된 문장 2

주석 처리 된 문장 3

*/


마지막으로 행 단위 주석이 있다.

//뒤에 등장하는 문장은 주석으로 처리된다.


// 주석 처리 된 문장1

//주석 처리 된 문장2



주석 처리에 있어서 

/*

블록 단위 주석 안에 

// 행단위 주석은 가능하나


*/


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

/*

블록 단위 주석 안에 

/*단일 행 주석 처리*/

또 블록 단위 주석은 컴파일 오류가 발생한다.

*


*/



02-3) printf 함수의 기본적인 이해


<print 함수를 이용한 정수의 출력과 서식문자>


printf 함수를 이용해서 문자열 이외의 데이터를 다양한 형태로 출력하는 것이 가능하다. 물론 정수를 출력하는 것도 가능하다. 


printf("%n\n", 1234); 를 실행시키면 1234가 출력되는데 여기서 %d는 '서식문자(conversion specifier)'라한다. 

서식문자는 출력의 형태를 지정하는 용도로 사용된다. 출력의 형태를 지정하려면 '출력의 대상'이 있어야 하는데 함수 호출시 전달되는 인자는 

,로 구분한다. 바로 이 두 번째 전달인자가 출력의 대상이 된다. 


%d가 지정하는 출력의 형태는 '10진수 정수형태의 출력'을 의미한다. 



'Programming Language > 열혈강의c 공부' 카테고리의 다른 글

04.데이터 표현방식의 이해  (0) 2017.06.29
03.변수와 연산자  (0) 2017.06.27
01.이것이 c언어다.  (0) 2017.06.26
00.시작  (0) 2017.06.26
:
Posted by Gongdile

2017-06-26

오늘 나간 진도 


chapter 01 이것이 c언어다.

chapter 02 프로그램의 기본 구성


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

01-1) c언어는 뭐냐 

 

c언어는 프로그래밍 언어이다. 


말그대로 c언어는 프로그래밍 언어이다. 

프로그래밍 언어란 컴퓨터와의 대화에 사용되는 일종의 '대화수단'이다.


대화수단으로서 프로그래밍 언어는 다양하다. c, java, pyhon 등등등 


마치 한국어 일본어 영어 처럼 말이다. 



다른 언어체계를 익힌 사람들이 대화를 나누기 위해서는 그 사이에 공통적인 대화 수단이 마련되어야 한다.

통역가나 번역기 처럼 말이다 


여기서 compiler(컴파일러)라는 개념이 나오는데  


사람이 컴퓨터에게 명령시킬때 프로그래밍 언어로 명령을 시키면 컴파일러가 컴퓨터가 이해할수있는 기계어로 변경하여 전달한다. 


왜 굳이 컴파일러를 등장시켰냐 라고 한다면 

(사람도 컴퓨터가 인식하는 기계어를 알지 못하고 사람이 기계어를 공부하기에는 부담이 크기때문이다.

 그리고 컴퓨터에게 사람의 언어를 가르친다는 것은 아직까지 불가능하기에)


기계어(Machine Language)란 컴퓨터가 이해할 수 있는 0과 1로 구성된 언어체계이다.


<정리>


-프로그래밍 언어란 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어를 의미한다.


-컴파일러의 역할은 프로그래밍 언어로 작성한 프로그램을 컴퓨터가 이해할 수 있도록 기계어로 번역하는 역할을 한다 

-->이렇게 번역하는 일 자체를 가리켜 '컴파일(compile)'이라 한다.



01-2) c언어의 역사와 특징 


C언어의 역사와 특징을 알면  좀더 이해하기 쉽고, 이런 장점이 있구나 하고 생각해보게되서 정리한다. 


<c언어의 역사>


c언어는 1971년경에 UNIX라는 운영체제의 개발을 위해 Dennis Ritchie와 Ken Thompson이 함께 설계한 범용적인 고급(high-level)언어이다.



기존의 UNIX라는 운영체제는  '어셈블리(assembly)언어' 라는 저급(low-level)언어로 만들어졌기 때문에 하드웨어 의존도가 높았다.(=이식성이 낮다)


여기서 저급언어가 말그대로 질이 낮은 언어라고 오해하면 안된다! 저급 언어라는건 인간보다 컴퓨터에 더 가까운 언어라는 것을 뜻한다.

즉, 고급언어에 가까울수록 사람이 이해하기 쉬운언어라는것 그렇다고 해서 무조건 고급언어가 저급언어보다 좋다고 판단하는 것은 무리가 있다.

 

저급언어로 작성되었다는건 작성된 컴퓨터 하드웨어가(cpu) 이해하기 쉽게 작성되었다는 것이고, 다른 cpu에 그 프로그램을 실행하려고 하면 똑같은 기능이라도 cpu종류에 따라서 별도로 구현해야했다. (그래서 위에서 하드웨어 의존도가 높다라고 설명했다.)


여기서 CPU는 'Central Processing Unit'의 약자로 중앙처리장치 라고한다. 컴퓨터의 두뇌에 해당하는 것으로, 사용자로부터 입력받은 명령어를 해석, 연산한후 그 결과를 출력하는 역할을 한다. 


--->어셈블리언어의 단점 해결을 위해서 c언어의 개발로  어셈블리언어의 저급 언어적 특징을 지니면서 이식성도 좋은 c언어가 운영체제의 90%이상이 대      체되었다. 



<c언어의 특징>


-C언어는 절차지향적 특성을 지닌다  

절차지향이란 '정해진 순서의 실행흐름'을 중시한다. 즉 절차지향 프로그래밍에서 중심이 되는것은 순서이다.


-C언어로 작성된 프로그램은 이식성이 좋다


-C언어로 구현된 프로그램은 좋은 성능을 보인다.



01-3)C프로그램의 완성과정 


C프로그램의 완성과정을 설명하려고한다.


1.프로그램 작성

2.컴파일(Compile)

3.링크(Link)

4.실행파일 생성


순으로 프로그램이 생성된다. 


나는 Visual C++ Express Edition 2010을 기반으로 실습했고, 인터넷에 무료로 배포중이다.


C프로그램을 이루는 파일의 종류는 소스파일과 헤더파일로 나뉜다.


파일의 이름을 입력할때 주의할점은

"C언어의 소스파일 확장자는 .c가 되어야 하므로, 소스파일의 이름을 입력할 때 반드시 확장자 정보인 .c를 붙여줘야 한다."








'Programming Language > 열혈강의c 공부' 카테고리의 다른 글

04.데이터 표현방식의 이해  (0) 2017.06.29
03.변수와 연산자  (0) 2017.06.27
02.프로그램의 기본구성  (0) 2017.06.27
00.시작  (0) 2017.06.26
:
Posted by Gongdile
2017. 6. 26. 22:52

00.시작 Programming Language/열혈강의c 공부2017. 6. 26. 22:52

c언어 공부가 필요해서 구입한 책 


[열혈강의 c 프로그래밍] 


하루에 최소 chapter01씩 꾸준히 공부하려고 한다. 



'Programming Language > 열혈강의c 공부' 카테고리의 다른 글

04.데이터 표현방식의 이해  (0) 2017.06.29
03.변수와 연산자  (0) 2017.06.27
02.프로그램의 기본구성  (0) 2017.06.27
01.이것이 c언어다.  (0) 2017.06.26
:
Posted by Gongdile