battle_c
Jangwon Lee - Team 3
실전코딩2
printf
int printf(const char *format, ...)
printf 함수는 매개변수를 format에 따라서 출력해주는 함수다.
int fprintf(FILE *stream, const char *format, ...)
printf 함수는 실행될 때 내부에서 fprintf 함수로 바뀌어서 실행된다.
printf("Hello World")
fprintf(stdout, "Hello World")
printf 함수가 fprintf 함수로 바뀔 때 stream에 stdout이 들어가게 되고 두 함수는 완전히 같은 역할을 한다.
stdio.h
standard input output library의 줄임말로 표준 입출력과 관련된 함수, 매크로 등이 포함된 헤더 파일이다.
stream
-
stdin
표준 입력 스트림(키보드)를 참조하는 FILE에 대한 포인터 -
stdout
표준 출력 스트림(스크린)를 참조하는 FILE에 대한 포인터 -
stderr
표준 오류 스트림(스크린)를 참조하는 FILE에 대한 포인터
man
man <command | function | header file | ...>
manual의 줄임말로 명령어나 함수, 헤더 파일 등에 대한 사용법을 알려주는 명령어다.
redirection
redirection이란 스트림의 흐름을 바꿔주는 것이다. redirection을 이용해 프로세스의 스트림을 콘솔이 아닌 파일을 사용할 수 있다.
- >
file > output
표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 덮어쓴다.
$ ./test > output_data
- >>
file >> output
표준 출력을 파일로 redirection한다. 파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙인다.
$ ./test >> output_data
- <
file < input
파일로부터 표준 입력을 받도록 redirection한다.
$ ./test < intput_data
컴파일러 vs 인터프리터
컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.
컴파일러
- 컴파일러는 고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성한다.
- 번역 실행 과정을 거쳐야 하기 때문에 번역 과정이 번거롭고 번역 시간이 오래 걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠르다.
- 컴파일러를 사용하는 언어에는 C언어 Java 등이 있다.
인터프리터
- 인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램이다.
- 프로그램이 직접 실행되므로 목적 프로그램은 생성되지 않는다.
- 줄 단위로 번역, 실행되기 떄문에 시분할 시스템에 유용하며 원시 프로그램의 변화에 대한 반응이 빠르다.
- 번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느리다.
- CPU의 사용시간의 낭비가 크다.
- 인터프리터를 사용하는 언어에는 Python, BASIC, SNOBOL, LISP, APL등이 있다.
차이점
컴파일러 | 인터프리터 | |
---|---|---|
번역단위 | 전체 | 행(줄) |
목적 프로그램 | 생성함 | 생성하지 않음 |
실행 속도 | 빠름 | 느림 |
번역 속도 | 느림 | 빠름 |
관련 언어 | C, Java | Python, BASIC, LISP, APL, SNOBOL |
GCC 명령어 옵션
-
-o
지정한 파일명에 출력한다$ gcc -o 00.option-o 00.option-o.c
-
-E
전처리하여 전처리된 소스 파일(.i)을 생성한다$ gcc -E 01.option-E.c
-E 옵션만 사용하면 전처리된 결과를 stdout에 보여주기만 한다.
$ gcc -E 01.option-E.c > 01.option-E.i
-
-S
컴파일하여 어셈블리 파일(.s)을 생성한다$ gcc -S 02.option-S.i
-
-c
어셈블하여 목적 파일(.o)을 생성한다$ gcc -c 03.option-c.s
-
-D
외부에서 매크로를 define한다$ gcc -DNO 05.option-D.c
-
-g
운영체제 고유의 형식으로 디버깅 정보를 만든다$ gcc -g 06.option-g.c
-
-Wall
GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력한다$ gcc -Wall 07.option-Wall.c
-
-I(upper case of i)
헤더 파일을 검색할 디렉터리를 추가한다$ gcc -ImyInclude 09.option-I.c