Skip to content
Snippets Groups Projects

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)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.

컴파일러

  1. 컴파일러는 고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번역한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생성한다.
  2. 번역 실행 과정을 거쳐야 하기 때문에 번역 과정이 번거롭고 번역 시간이 오래 걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠르다.
  3. 컴파일러를 사용하는 언어에는 C언어 Java 등이 있다.

인터프리터

  1. 인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 번역과 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램이다.
  2. 프로그램이 직접 실행되므로 목적 프로그램은 생성되지 않는다.
  3. 줄 단위로 번역, 실행되기 떄문에 시분할 시스템에 유용하며 원시 프로그램의 변화에 대한 반응이 빠르다.
  4. 번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느리다.
  5. CPU의 사용시간의 낭비가 크다.
  6. 인터프리터를 사용하는 언어에는 Python, BASIC, SNOBOL, LISP, APL등이 있다.

차이점

컴파일러 인터프리터
번역단위 전체 행(줄)
목적 프로그램 생성함 생성하지 않음
실행 속도 빠름 느림
번역 속도 느림 빠름
관련 언어 C, Java Python, BASIC, LISP, APL, SNOBOL

GCC 명령어 옵션

  • -o
    지정한 파일명에 출력한다

     $ gcc -o 00.option-o 00.option-o.c

    o

  • -E
    전처리하여 전처리된 소스 파일(.i)을 생성한다

     $ gcc -E 01.option-E.c

    -E 옵션만 사용하면 전처리된 결과를 stdout에 보여주기만 한다.

     $ gcc -E 01.option-E.c > 01.option-E.i

    redirection으로 .i를 생성한다.
    E

  • -S
    컴파일하여 어셈블리 파일(.s)을 생성한다

     $ gcc -S 02.option-S.i

    .s 생성(.i 없어도 가능)
    S

  • -c
    어셈블하여 목적 파일(.o)을 생성한다

     $ gcc -c 03.option-c.s

    .o 생성(.i나 .s 없어도 가능)
    c

  • -D
    외부에서 매크로를 define한다

     $ gcc -DNO 05.option-D.c

    D

  • -g
    운영체제 고유의 형식으로 디버깅 정보를 만든다

     $ gcc -g 06.option-g.c

    g_Raspberry_Pi
    on Raspberry Pi
    g_Git_Bash
    on Git Bash

  • -Wall
    GCC가 제공할 수 있고, 일반적으로 유용한 모든 경고 메시지 출력한다

     $ gcc -Wall 07.option-Wall.c

    Wall

  • -I(upper case of i)
    헤더 파일을 검색할 디렉터리를 추가한다

     $ gcc -ImyInclude 09.option-I.c

    I