Effective C 1장

민거홍·2021년 1월 2일
1

Effective C

목록 보기
1/2
post-thumbnail

Effective C 1장에서는 C 언어에 대한 간단한 Overview를 제시합니다.

1. 첫 C 프로그램 (hello.c)

#include <stdio.h>
#include <stdlib.h>

int main (void) {
	puts("Hello, World!");
    return EXIT_SUCCESS;
}

2. 프로그램 컴파일 방법

% cc hello.c
% ./a.out
  • hello.c를 컴파일한 후 a.out 파일을 생성.
  • 생성된 a.out 파일을 실행.

3. Preprocessor Directives (전처리기 지시문)

#include <stdio.h> // stdio.h 라이브러리를 로드. 표준 I/O 함수들을 포함
#include <stdlib.h> //stdlib.h 라이브러리를 로드. 일반적으로 필요한 함수들을 포함

전처리기 지시문은 코드가 실행되기 전, 전처리를 할 때 실행된다. #include 전처리는 라이브러리를 대체한다는 뜻이다.

4. main 함수

main()은 프로그램이 시작될 때 불린다. (i.e. main entry point of program)
main의 반환값은 프로그램의 실행이 성공적이였는지 여부를 나타낸다.

  • EXIT_SUCCESS macro는 성공적으로 프로그램이 종료되었을 때 반환하는 값이다. (0)
  • EXIT_FAILURE macro는 프로그램 실행에서 문제가 생겼을 때 반환하는 값이다.

5. 함수의 반환값 확인하기

  • C 함수들은 보통 함수 실행이 성공적이였는 나타내는 값을 반환한다.
  • 예시로 puts()는 실행이 성공적이였을 때는 양수 값을 반환하지만 실행에 실패하였을때는 음수값을 반환한다 (macro EOF).
  • 함수의 return statement 뒤에 있는 코드는 실행되지 않는 코드다 (dead code)
#include <stdio.h>
#include <stdlib.h>
int main(void) {
	if (puts("Hello, World!) == EOF) {
    	return EXIT_FAILURE;
    }
    return EXIT_SUCCESS;
}

6. Formatted Output (출력 및 표현식)

  • printf함수는 출력 방식을 나타내는 표현식과 표현식에 있는 conversion specifier들 (예: %s)를 대체하는 varargs값들로 이루어져 있다.
printf("%s\n", "Hello, World!"); //printf 예시 

7. Portability (범용성)

  • 다양한 C 컴파일러들 (gcc, clang, 등등)이 존재하고 각 컴파일러들의 구현 방식은 조금씩 다르다.
  • 그 때문에 5가지 범용성 문제가 발생할 수 있다.
    1. Implementation-defined behavior: 각 컴파일러들마다 구현의 차이.
    1. Unspecified behavior: 두 개 이상의 선택지가 있는 표준
    1. Undefined behavior: 행동이 정의되어 있지 않은 표준 (예: integer overflow)
    1. Locale-specific behavior
    1. Common extensions (예: POSIX Threads들이 포함되어 있지 않을 수 있다.)
profile
프로그래밍과 교육을 좋아하는 사람입니다.

0개의 댓글