210830, C언어 입문 - day 4

Min Hyeok·2021년 8월 30일
0

C언어 개념 익히기

목록 보기
4/19

ㅇㅏㄴ녕안녕~~ 내가 왔다. 일단 토요일은 공부 안했고, 일요일은 정말 쥐며느리 코딱찌만큼 했는데 뭔가 여기에 기록으로 남기기 양심이 찔려서 오늘 공부한 거 까지 한번에 올리려고 한다.

토익 시험 접수를 미리 미리 했어야 했는데, 나의 나태함과 귀찮음이 만든 걸작인 "21년도 고민혁"의 완성으로 인해 하지 않아서(?) 군대 50% 할인권이 슝~ 날아갈 것 같다. 아 ㅋㅋ 반성해 나 자신...

뭐 여튼, 복습 ON.

6장, 표준 출력 함수

여기 뭔 내용이 이렇게 많냐. 정리하다 짜증나서 엎을뻔 정말~~

우선 라이브러리에 대해 araboja.

우리가 어떤 어마무시한 프로그램을 짠다 쳤을때, 당연히 한번에 쨘!하고 완성본이 나오진 않을거다. 완성1.exe, 완성2.exe, 완성3.exe,,,, 완성 167.exe, 진짜완성본.exe. 이런식으로 수정을 거치고 거쳐서 진짜 완성본이 나오겠지. 근데 이렇게 프로그램을 수정해나가면서, 변경되지 않는 함수들이 있을거다. 그런데 이걸 따로 저장할 때마다 1부터 100까지 싸그리다 다시 컴파일 하면, 넘모 비효율적이잖아? 빈대잡으려고 초가삼간 다 태울필요 없잖어! (좀 똑똑해 보였다.)

이를 방지하기 위해서 Library File (뭐시기.lib) 파일이 있다.는거시다. 지속적으로 업데이트가 필요한 함수는 원래 있던 source file에 고대로 유지해주고, 나머지 함수들은 library에 저장한다. 즉, "실제 사용하는 내용"만 실행파일에 포함시키도록 하는거시지.

어느정도 요약해주자면, 자신이 가지고 있는 함수들 중, 실제로 다른 소스 파일에서 사용한 함수의 기계어만 분리할 수 있도록 목적파일을 재구성 한 것이다. 뭔 소린지 알간?

자세한 예시는 나의 완벽한 정리본 with Galaxy Tab s7+를 참고하자.

아 그리고, 이 라이브러리 파일은 함부로 열 수가 없따. 그래서 장점 중 하나로 "내 소스코드를 다른사람에게 공개하지 않고 함수를 사용할 수 있게 해준다"가 있ㄷ음.

C언어를 쓸 때 그냥 라이브러리만 슉.슈슉.슉.슉.슈슈.슉.슉. 바꿔주면 기능 확장과 변경이 easy하게 ganeung해진다.

그-런데!

이 라이브러리 파일을 다른 사람들이 응용하려면, 다른 소스파일에 있는 함수를 참조할라카면 함수 원형을 알아야 컴파일을 할 수 있기에, 프로그램에 있는 함수를 쓰려면 싹 다 함수 원형 선언을 해주어야한다.

만약 함수가 324개면,
int Add(int value1, int value2); 이 짓을 324번 해줘야 한다는 것. 우웩 ㅋㅋ 미쳤냐 내가 ㅋㅋ

이런 불편함을 없애기 위해~~ 함수 원형들을 특정 파일에 미리 선언해준 파일인 Header file (머씨기.h) 를 사용해줘야한다.

뭐, C언어로프로그래밍 하면 묻지도 따지지도 않고

#include <stdio.h>

쓰잖어. 그거임.

그리고 살짝쿵 저 헤더파일 앞에 있는 # 관련해서, 전처리기 종류 두개만 알아보자면

1 )

#include

컴파일러에 내가 명시한 파일을 읽게 지시하는 것임. <stdio.h>를 뒤에 붙이면 비주얼스투디오에서 제공하는 헤더 파일인 stdio.h를 읽는 거.
뒤에 "MyNote.h"를 붙이면 내가 정의해 만든 헤더 파일을 읽는거. 알간? ㅋㅋ

2 )

#define

이건 상수, 명령문을 치환하는거.
만약

#define GOMINHYEOK 4
int data = GOMINHYEOK; 

이라고 쓰면 data는 4가 됨. GOMINHYEOK이 곧 4인거지!
이런 느낌으로 써서 문법으로도 치환 할 수 있따.

#define sup(a) (a*a)
int data = sup(7);

욜케 써주면 data는 49, sup(a)를 a*a로 대체한게 증명ㅇ이 도ㅑㅆ찌!

이상 여기까지 전처리기 내용.

다시 라이브러리 내용으로 돌아와서, 라이브러리 중 "C 표준 라이브러리"라는것이 있다. 운영체제에 따라 문법을 굳이 요거 저거 건들 필요 없이 잘 동작하는 프로그램을 만들 수 있도록 하는 것이라고 한다.

? 뭔 개소리?

사실 나도 처음 읽었을 때 운영체제고 뭐고 개념이 얕아서 제대로 이해를 못했다.

자, 운영체제. 우리가 보통 많이들 만지는 Windows, 더럽게 비싼 Mac OS, 누가 쓰나 싶은 LINUX. 등등. 이렇게 많은 운영체제가 있는데, 다~ 기술적 기반이 다르다. 그냥 딱 봐도 다르잖아? 윈도우만 쓰던 사람이 Mac 가면 적응 못한다. 내 얘긴 아님. 아마도. ㅋㅋ.

여튼 이렇게 기술적 기반이 다른데, 갑자기 윈도우에서 쓴 프로그램을 맥으로 가져가면, 문법적으로도 차이가 클거다. 윈도우 기반으로 쓴 프로그램인데, Mac으로 가져간다..? ㅇㅇ.. 즉 소스코드를 수정해야한다는 말도 되겠지? 멀쩡하게 다시 프로그램을 돌리려면? 요렇게 개발 환경에 변화가 생기게 되면 뭐 다시 수정하고 컴파일 수정하고 컴파일 벌써 짜증난다. 물론 C언어가 함수가 꽃인 만큼 함수로 요거저거 다 하게 되는데. 꼬우면 내가 함수를 싹~다 다시 짜면 된다. 되겠냐? 내가? ㅋㅋ

그래서 이 C언어 컴파일러를 만든 Inc.들이 프로그래머 편하라고 운영체제별로 구현한 함수를 만들어서 제공한다. 이것이 C언어 표준 함수. 이걸 라이브러리로 모아놓은게 C 표준 라이브러리.

와 설명 겁나깔끔해. 거의 뭐 1타강사.

그리고 앞에 말한 C언어 표준 함수는 뭐 대충 책에선 putchar, puts 설명해줫는데.. 어느정도 알고 있다. 패스.

설명해달라고?

putchar : 단일 문자 출력, puts : 문자열가튼거 출력. ..아마 마즐거야. 틀렸으면 다시 수정하도록 하겠따.

그리고 나머지는 싹 다 printf에 관한 내용을 알려준다.

여기선 내가 모르는 것만 여기 적도록 하겠다.
대략적인 사용 방법은 아니까..

1 ) 출력 키워드
%d 정수, %u (부호 없는)정수, %c 문자, %s 문자열, %x 16진수 정수, %o 8진수 정수, %e 실수를 지수형태로.

맞나? ㅇㅇ 확인해보니 맞네.
대충 외운 ㄱㅓㅅ ㄱㅏㅌ다.

그리고 %c란게 있느ㄴ데, 이건 "변수가 가진 값을 아스키 표에 대응하는 문자로 출력한다.

그리고 정수 출력은 4바이트 값임. 참고.

그리고 제어 코드중 \r, 해당 줄 처음으로. \t, 한 탭(8배수). \b 바로 앞 한카ㄴ.. 요정~도.

7장

.. 내가 양심에 손을 얹고, 정말 여긴 뭐 없더라. 진짜 다 안다. 패스할게..?

뭐. 어쩌ㄷㅏ보니,

여기까지!

0개의 댓글