본문 바로가기
C

C언어 기초강의 5강 main()함수의이해

by 코드덕후 2022. 8. 12.
728x90

 

방송에서 사용된 PPT를 이미지 형태로 제공합니다. 
저작권이 있는 내용이니 재편집 및 무단배포를 금지해 주시기 바랍니다.
강의용이나 공부용으로 사용하시기를 부탁드립니다.

 

C언어의 역사 및 장.단점

 

 

 

언어는 1970년대 초 벨 연구소(Bell Laboratories)의 데니스 리치(Dennis Ritchie)가

UNIX 운영제체 개발을 위해서 제작하게 된 언어입니다.

기존에는 기계어에 가까운 저 수준의 언어들이 주류였다. 그래서 고 수준 언어를 제작

하기 위한 목적이 언어 개발의 주목적이기도 했습니다.

B라는 언어에서 발전해서 C 라는 이름이 붙여지게 되었습니다. C는 이후 프로그래밍 하기 쉬운 편리한 언어로 평가되어 많은 연구가 되었습니다.

 

제정될 당시에는 C표준에 대한 연구를 ANSI(  American National Standards Institute )에서 관리 했지만 현재는  ANSI가 아닌 ISO에서 관리하고 있습니다. C의 현재 표준안은 1999년에 제정된 ISO/IEC 9899:1999입니다. 그 이전에 흔히들 ANSI C라고 알려져 있던 C의 표준안은 1990년에 공표된 것으로 ISO/IEC 9899:1990이 됩니다.

 

C++표준안 역시 ISO에서 관리하고 있으며, 1998년에 공표된 ISO/IEC 14882:1998이

현재 C++의 표준안입니다.

 

C언어의 장점으로는, 이전의 언어 보다 빠르고 크기나 효율 등의 기능적인 면에서 고급 언어와 어셈블리어 의 중간 기능을 수행할 수가 있다.

 

C언어의 단점으로는, 제작 된지 오래 되어서 근래에 개발 되는 큰 프로젝트에는 적합하지 않다는 것이 단점 입니다. 보안에서 취약헤서 최근에 표준에서는 _s,류의 함수들을 사용하며 보안에 힘쓰고 있습니다. 

 

C는 절차(구조)지향적 언어라고 합니다.  

절차(구조)지향적 프로그래밍 언어란 프로그래밍을 제작 할 때 실행순더등이 기본적인 처리를 절차(순서)를 지정해서 프로그래밍을 하기 때문에 절차 지향적 언어라 합니다. 

절차 지향적 언어로 작성된 프로그래밍을 절차 지향적 프로그래밍이라 합니다. 

COBOL, FORTRAN, PL/I등이 이에 해당 하는 언어 입니다. 

 

이제 C의 역사에 대해서 알아보았고 장점과 단점 배경을 들을 알아보았으니

기본 문법에 대해서 설명 하도록 하겠습니다.

 

C기초문법 분석   

 

 

 

 

 

 

자 이것이 여러분이 처음 시작하고 만들어본 프로그램 입니다. 

얼마나 감격 스럽습니까?^^ 

직역을 한다면 "지옥에 오신것을 환영합니다"

 

많은 책들에서 Welcome to HelloWorld 라고 합니다. 세로운 세계에 온것을 환영하는

의미에서 말이죠 ...

 

하지만 프로그램을 만들다보면 진정한 지옥을 겪을 때가 있습니다.

 

그때마다 오늘 만든어본 이 부분을 생각하며 난 지옥에 사는데 멀?

하며 웃어 넘기시기 바랍니다.^^

 

자이제 한줄씩 설명 해 보도록 하겠습니다.  

 

 

이부분은 #은 전처리명령어 들에게 거의 공통적으로 붙여집니다. 일단은 그냥 전처리를 한다 라고 이해를 하시면 되겠습니다. 

 

전처리가 무엇인지는 모두 아시겠죠? 

요리에서 전처리는 빠르게 요리를 하기위해서 재료를 손질해 두는것을 전처리 라고 합니다. 

 (요리를 빨리 하기 위해 전처리 된 재료들... )

 

이렇게 무엇을 빨리 처리하기 위해서 사전에 하는 작업들을 전처리 라고 합니다.

# 명령어들은 프로그램이 잘 돌아가게 하기 위해서 필요한 것들을 사전에 작업 할때

사용됩니다.

그러니 # 이것은 "사전에 처리한다."라고 생각하면 됩니다.

자그럼 다음으로 넘어 가보도록 하죠

 

include[ 포함하다 , ~을 포함시키다] 라는 사전적의미를 가지고 있습니다.

말그대로 그냥 "포함 시키다" 라고 생각하시면 됩니다.

 

< > 이꺽쇠로 시작 하는 것들과 " "이렇게 큰 따옴표 2개로 시작 하는 것들을

앞으로 많이 보시게 될텐데요 그냥 이 의미는 < > 안에 있는 것을 이라는 의미로 생각하시면 됩니다. "" 이것또한 안에 있는것을 이라는 의미입니다.  

 

그럼 뭐가 다를가요? 

 

< > 으로 시작한 것들은 비쥬얼 스튜디오가 설치된 경로에서 찾아서 라는 의미로 보시면 됩니다.

" " 으로 시작한 것들은 프로젝트가 만들어진 폴더를 기준으로 찾아서 라는 의미로 보시면 됩니다.

 

그냥 일단 이렇게만 생각하시고~~ 다음으로 넘어가 보도록 하죠^^

 

<> 안에 들어 있는 stdio를 설명 하도록 하겠습니다.

stdio는

standard ( 표준)

input ( 입력 )

output( 출력 )

의 조합어 입니다.

그래서 줄여서 stdio(스트디오)라고 읽습니다.

그대로 읽어 보면 표준 입력 출력 이라는 의미가 됩니다. 

컴퓨터의 표준 입력 출력 장치는 키보드/모니터가 있습니다. 

키보드로 입력 받거나 모니터로 출력할때 사용되는 기능들~~을 포함~~해라 

이렇게 됩니다. 

 

자다음은 .h

이것은 확장자 입니다. 헤더파일( Header File )이라는 의미 입니다.

 

자이제 모두 붙여서 이야기를 해볼까요?

 

#include <stdio.h> 

: 프로그램이 시작하기 전에 헤더가 포함된 경로 에서 표준 입출력 헤더를 포함해라. 

 

1. 프로그램이 시작하기 전에( # )

2. 비쥬얼 스튜디오가 설치된 경로에서( < > )

3. 표준 입력 출력 헤더( stdio.h )를

4. 포함해라( include )

 

이런 의미가 됩니다.

저한줄의 의미는 아주 큰데요 c에서 사용되는 대부분의 기능을 포함 하고 있는 헤더파일 이기 때문입니다.

표준 입력 출력에 해당하는 부분에 대한 기능은 저기에 사전에 만들어져 있는 것을 우리들이 사용하게 되는 것입니다.

 

그러니 아주 큰 의미가 되겠죠?^^ 

 

  

자 다음은 void main( void ) 이부분입니다.

여기에서 void는 없다라는 의미입니다. 그냥 없다!! 라고 생각 하시면 됩니다.

타입이 없다. 입력이 없다. 출력이 없다. 등에 사용되는 없다!!! 입니다.

 

일단 그렇게 이해 하시고~~~

main  이부분은 영어 그대로 ~~ 중요한 , 가장 큰, 주된 이란 뜻이 됩니다.

이 부분을 나중에 메인 함수 라고 부르게 되는데요 프로그램에서는 시작점(진입점)

이라고 말합니다.

 

모든 프로그램에는 꼭 한개는 존재해야 하는 함수이죠 , 그래서 main함수라고 부릅니다.

 

그럼 앞에 붙은 void  뒤에 붙은 void는 무엇일까?

 

중학교 에서 배울때 생각 했던 함수 그림 입니다.

 

위의 함수는 검정색 동그라미가 들어가서 ???? 어떠한 기능을 수행하는지는 모르지만 해가 되서 나온다입니다.

 

사람이 밥을 먹고 소화기능을 거쳐 ~~~하게 되는것( ~~~은 알아서...내보내는 것)을  

생각하시면 됩니다. 

 

자 이것이 함수입니다.  위에서 main을  main함수 라고 말한 것 기억 나시죠?.. 

 

그러면 함수가 들어가는 것과 나가는 것이 있다고 했는데 그 두가지가 뒤의 void 와 

앞의 void 입니다. 

 

위의 그림에서 보면 들어가는 값 은 뒤에 void를 의미 합니다.

나가는 값은 앞의 void를 의미합니다.

 

그런데 void는 없다라는 의미라고 했습니다. 그러니 main함수에 들어가는 값이 없고 나가는 값도 없다 이렇게 해석이 되는 것입니다. 

 

뒤에 있는 void 자리를 전달인자 / 매개변수 라고 부릅니다. 

앞에 있는 void 자리를 반환값 이라고 합니다.

 

자 이제

void main( void  ) 

: 전달인자가 없고 반홦값도 없는 메인 함수 

 

1. 이 메인 함수는 ( main )

2. 전달 인자가 없고 ( (void)  ) : 뒤쪽 ()을 포함한 void

3. 반환값도 없다 ( void ) : 앞쪽 void

 

다른 형태도 가능합니다. 

 

int main( int )  

: 이메인 함수는 전달인자가 int 이고 반환값이 int이다.

 

void main( int ) 

: 이메인 함수는 전달인자가 int 이고 반환값은 없다.

 

int main( void ) 

: 이메인 함수는 전달인자는 없고 반환값은 int이다.

 

int 는 무엇일까? 지금은 궁금해 하지 않으셔도 됩니다.

그냥 이렇게 메인 함수를 말하는 구나 라고만 이해하시면 됩니다.

 

뒤에서 변수에서 배우게 되면 이 뜻도 이해를 하시게 되실테니까요.

 

자!! 이제 특별한 경우

C에서는 앞의 void와 뒤의 void를 생략 가능합니다.

C++에서는 앞의 void는 생략이 불가 하고 뒤의 void만 생략이 가능합니다.

 

void main() , main(void), main()

이게다 맞는 말이 됩니다.  하지만 생략할 수있는것은 void만 가능합니다. 전달인자나

반환값이 있다면 생략이 불가능 합니다.

 

앞으로의 예제에서는 절대 생략 하지 않고 진행 할 것입니다.

무엇이든지 명확한 것이 좋습니다. 편하다고 생략 하는것 보다는 이렇게 쓰지만 생략도 가능하다

라고 아시는것이 좋습니다.

 

자 이제 절반을 달려 왔습니다. 

 

 

{ }의 의미를 배워볼까요?  

 

{ : 지역이 시작 되었다. 

} : 지역이 끝났다  

 

이런 의미가 됩니다. 어떠한 지역 또는 범위가 시작 하고 끝났음을 알리는 것입니다. 

둘은 콤비 입니다, 부부이고, 커플 입니다.  

무슨 말이냐~~ 하면 지역이 시작이 되면 항상 끝이 있어야 한다는 의미입니다. 

지역이 시작만 하고 끝이 없거나 끝만 있고 시작이 없으면 컴파일러가 화!!를 냅니다. 

문법이 틀렸다고 화를 냅니다. 

 

그러니 항상 {}이렇게 쌍으로 사용하시는 것을 추천 드립니다. 

 

위에서 배운 main함수와 {}을 붙여서 이제 이해해 보겠습니다.

 

void main(void) : 이메인 함수는 전달인자가 없고 반환값이 없다.

{  : 메인함수의 지역이 시작 되었다.

 

     여기는 메인 함수가 하는 기능을 처리하는 곳이다.( 메인 함수의 지역 ) 

 

} : 메인 함수의 지역이 끝났다.

 

이렇게 됩니다.

함수가 소유한 지역을 의미할때 사용합니다.

 

자 이제 막바지가 되어 갑니다.

 

 

위에서 #include <stdio.h>

이부분 기억 나시나요 여기에서 output에 해당하는 출력 함수 입니다.

int printf( const char * _Format, ...);

 

stdio.h 파일 안에 포함 되어 있는 표준 출력 함수입니다.

어~~ 저건 모지? 전달 인자에 이상한 말들이 있네??

어려워 하지마세요 뒤에가시면 알게 되겟지만 문자열 포맷!! 이라는 뜻인데요

지금은 그냥 "" 사이에 있는 것들을 표준 장치(모니터)에 출력하는데 필요한 함수

 

이정도만 알고 표준 입출력 심화를 할때 조금더 깊게 이해하도록 하겠습니다.

 

자그러면 printf함수는 화면에 출력해라!! 라는 기능을 수행하는 함수다

이렇게 이야기 합니다.

 

자 그럼 어떤것들을 출력할까?

전달된 인자를 출력하게 됩니다. " "사이에 있는 내용을 화면에 출력합니다.

어그런데 \n 이라는게 문장끝에 붙어 있습니다.

 

 

이명령은 이스케이프 문자(Escape Sequence)라고 하는것인데요 이것 말고도

여러가지가 있지만 이것도 표준 입.출력 때 다루도록 하고 여기서만  설명 하도록

하겠습니다.

 

\n 이말은 한줄을 바꿔라 : newline 에서 n이라고 생각하시면 됩니다.

즉 Welcome to HellWorld를 화면에 출력한후에 한줄 바꿔라

이렇게 되겟죠?

 

printf("Welcome To HellWorld\n");

 

여기에서 마지막 끝에 붙어 있는 ;(세미콜론)이 있습니다.

 

비쥬얼 스튜디오는 ;(세미콜론)이 나오기 전까지 한줄이 끝났는지를 알수 없습니다.

그래서 나이제 이문장이 끝났어 라는 의미에서 세미콜론을 끝에 붙여 주어야만 합니다.

 

초보자 분들이 가장 많이 하는 실수가 ;(세미콜론)과 :(콜론) 을 착각 하시는데요

둘은 분명히 다르니 유념하세요.

 

자이제 오늘 처음 으로 만들어본 프로그램에 대한 설명이 완료되었습니다.

 

앞에 내용을 모두 읽으셨다면 이제

컴파일 하고 화면에 출력해보세요

 

앞에 내용을 건너 띠셧다면 무슨 말인지 모르시겠죠?

 

프로젝트를 만들고 위의 소스를 그대로 타이핑 하신후

Ctrl + F7을 누르면 컴파일이 됩니다.

그런후

Ctrl + F5(디버깅 하지 않고 시작 )

이렇게 하면 위에 올려 두었던 내용이 나오게 되겠죠?

스크롤을 줄이기 위해  그림을 ^^

 

영문 버전일 경우 press Any key .... 라고 나오실텐데요 같은 뜻이니 ^^ 그냥

넘어가셔도 됩니다. 

이제 printf함수를 정리해보면  

 

printf("Welcome To HellWorld\n");

 

1. 화면에 출력해라( printf )

2. ""안에 있는 내용을( ("Welcome To HellWorld" )

3. 그리고 한주 바꿔라( \n )

4. 한줄이 끝났다( ; ) 

 

 

 

이제 응용을 해볼까요? 

" " 따옴표 안에서 \n을 빼보세요

그러면 아래 처럼 됩니다.

 

 

한줄을 바꾸라는 명령을 빼버렸기 때문에 그냥 붙여서 출력이 되는것입니다.

 

다음 예제도 한번 작성해 보세요



 

결과 화면과 동일하게 나오게 됐나요?

 

 

코딩덕후 C언어 기초강의 유투브 까페

코딩을 조금 더 쉽게 재미있게 배우기 위한 까페입니다. C언어/Win32Api/C++/파이썬등을 유투브로 배우세요
https://cafe.naver.com/coducks

 

코딩덕후 : 네이버 카페

코딩을 조금 더 쉽게 재미있게 배우기 위한 까페입니다. C언어/Win32Api/C++/파이썬등을 유투브로 배우세요

cafe.naver.com

 

 

유투브 강의 

https://youtu.be/nJC4QGRIKtE

 

 

728x90
반응형
LIST

댓글