Algorithm/C언어

[ 1. C언어의 기본 구조 ]

대시 2021. 9. 30. 10:18

정보처리산업기사 실기 자격증 취득을 위해 알고리즘 공부를 시작!

기초부터 시작합니다.

 

1) C 언어란?

C 언어는 1971년에 벨 연구소의 켄 톰프슨과 데니스 리치가 개발한 프로그래밍 언어이다.

C 언어는 운영체제의 어머니라고 할 수 있는 UNIX 운영체제를 쉽게 개발하기 위해 만들어졌다.

 

기존의 UNIX 운영체제는 "어셈블리 언어"라는 로우-레벨 언어로 작성되었다.

어셈블리 언어는 컴퓨터 CPU 구조에 변화가 생길 때마다 매번 같은 프로그램을 서로 다른 어셈블리어로

작성해야 하는 문제점이 있었기 때문에 프로그래밍을 하는데 있어서 어떤 개발자가 봐도 수정할 수 있는

고급 프로그래밍 언어의 필요성이 점점 증가했다.

그 결과 C 언어가 탄생하게 되었고, 어셈블리 언어로 작성된 대부분의 코드는 이후 C 언어로 재작성되었다.

이후의 많은 컴퓨터 프로그래밍 언어들이 C언어의 문법적인 부분을 이어받았다.

 

 

로우-레벨 언어란 사람보다 컴퓨터에 더 가까운 저급 언어를 말하고,

하이-레벨 언어는 기계보다 사람에게 더 가까운 고급 언어라고 말한다.

 

C언어는 저급 언어와 고급 언어의 특징을 모두 가지고 있는 절차 지향 프로그래밍 언어이다.

 

2) C언어의 특징

* 장점

1) 하드웨어 제어가 가능하다.

- UNIX 운영체제를 개발하기 위해서 만들어졌다고 얘기했다. 

  따라서 기계어 수준의 구체적인 하드웨어 제어가 가능하다. (임베디드 시스템은 대부분 C언어로 개발됨)

- 저급 언어의 특징을 가지고 있으므로, 어셈블리어 수준으로 하드웨어를 제어할 수 있음

 

2) 효율적이다.

- C언어로 작성된 프로그램은 다른 언어로 작성된 프로그램에 비해 실행 속도가 빠르고 메모리를 효과적으로 쓸 수 있음

 

3) 간결하다.

- 코드가 간결하여, 완성된 프로그램의 크기가 작고 실행 속도가 빠르다.

 

*단점

1) 유지보수 및 수정이 힘들 수 있다.

-  C로 짜인 규모가 큰 프로그램들은 수정하기 매우 어려울 수 있다.

   최근에 나오는 언어들은 주로 클래스나 패키지라는 큰 프로그램을 여러 단위로 나누어 더 관리하게 쉽게

   만들 수 있는데, C는 그런 기능이 없다.

 

 

3) C언어의 기본 구조

#include <stdio.h>
int main(){
 
  printf("C언어 기본 구조\n"); // 시작합니다.
  return 0;   
}
cs

 

기본 구조는 이처럼 헤더와 mian() 함수로 이루어진다.

 

1) # include <stdio.h> 

- 표준입출력에 관한 함수들이 정의되어 있는 헤더파일을 포함한다는 뜻

- 표준입출력 함수에는 printf, scanf 등이 있다.

- 헤더 파일은 특정 파일을 읽어서 소스 파일에 포함해준다.

  즉, 필요한 라이브러리 정보를 가지고 있는 헤더 파일을 컴파일러에 불러오라고 지시해야 한다.

   헤더 파일 (stdio.h)은 확장자가 .h로 끝나는 파일이다. (표준 라이브러리 함수들이 선언되어 있는 파일)

 

2) main( ) 함수

- main( ) 함수는 평범한 함수가 아니라, "프로그램 그 자체"이다. 

  그리고 c에서는 모든 것이 함수들로 이루어져 있다. 

- 프로그래밍 언어에는 여러 함수를 만들어서 사용할 수 있는데, 여러개의 함수 중에 기본적으로

  운영체제는 main( )함수를 가장 먼저 실행한다.  즉, main( ) 함수는 시작점이다.

  그래서 기본적으로 main( ) 함수를 만들어서 그 안에 프로그래밍을 한다.

 

- main( ) 함수가 없으면 exe 같은 실행 파일을 만들 수 없다.

 

- main( ) 함수도 일반 함수와 마찬가지로 인수(파라미터)를 입력받거나 어떤 값을 변환할 수 있다.

  일반함수는 자신을 호출한 함수와 값을 주고받지만, main( ) 함수는 자신을 호출한 함수가 없다.

  호출한 함수가 있다면 그것은 바로 운영체제이다. 따라서 운영체제(os)와 값을 주고 받는다.

 

여기서 처음 코딩해보는 분들이 아니라면 main( )함수 대신

int main( ) , void main 을 사용해보았을 것이다.

 

함수 정의 앞에 붙는 데이터형은 함수의 리턴값의 데이터형인데,

int main( ) 하면 main( ) 함수가 종료될 때 정수형 값을 리턴하겠다는 뜻이고,

void main ( ) 하면 main ( ) 함수가 종료될 때 아무 값도 리턴하지 않겠다는 뜻이며,

main ( ) 하면 void main ( )과 같다.

 

즉, 위에서 말했듯이 main ( ) 함수는 프로그램의 엔트리 포인트로서, 운영체제가 실행시켜주는 함수이다.

운영체제는 프로그램이 종료할때 main( ) 함수의 리턴값을 받아보고 프로그램이 왜 종료되었는가를

판단한다.

 

보통의 경우, main( ) 함수가 0을 리턴하면 프로그램이 정상적으로 실행을 마치고 종료한것으로 간주하고,

0 이외의 값을 리턴할 경우 비정상적으로 종료된 것으로 간주한다.

그래서 결론적으로, main ( ) 함수가 어떤 값을 리턴하는지 운영체제에게 중요할 뿐, 사용자에게는 전혀 중요하지 않다.

 

그러니, int main( )이든, void main ( ) 이든 main ( ) 이든 사용자 입장에서는 아무 차이점이 없지만

운영체제의 입장에서는 의미가 있을 순 있다.

 

3) return

return은 함수가 아니라, C언어의 키워드(keyword) 즉 "예약어"이다.

 

return은 현재 있는 함수에서 빠져나가며, 그 함수를 호출했던 곳으로 되돌아 가라는 뜻이다.

되돌아 가면서 그 함수를 호출했던 곳 즉, calling routine에 어떤 값을 반환하는 것이다.

 

return은 함수의 어떤 곳에서도 위치할 수 있는데, return이 실행되는 즉시

그 함수는 무조건 실행이 종료된다. ( 즉 값을 반환 후 함수는 종료된다. )

즉, 현재의 함수에서 빠져 나가라는 의미이다.