Chapter 1~3

GraGrass·2024년 2월 5일

ANSI C version

1. 실행 순서

#include <stdio.h>

int main() {
	printf("Hello World!\n");
}

컴파일

hello_world.c -> hello_world.obj

  • 컴파일러가 소스 코드로부터 오브젝트 파일 생성
  • 자연어를 기계어로 번역
  • 윈도우에서는 .obj / 리눅스에서는 .o

링크

hello_world.obj -> hello_world.exe

  • 링커가 오브젝트 파일과 라이브러리를 연결하여 실행 파일 생성
  • 실행 파일의 시작점을 main()으로 지정

실행

  • 화면에 실행 결과 표시

2. main() 함수

프로그램 시작과 끝

  • 모든 프로그램의 시작점은 main()
  • main()의 시작 '{' & main()의 종료 '}'
  • main()이 끝나면 프로그램 종료

실행

  • 외부에서 main() 호출
  • return 값이 있음
  • 표준에 의해 기본 리턴값 = 0
  • return 값은 운영 체제(쉘)에서 사용됨

자료형과 표현

1. 정수형 숫자

정수형 숫자: int(eger)

  • 1, -1
  • 123, -123

양수 전용 숫자: unsigned

  • 1U, 123U

64비트 숫자: long

  • 1L, -1L
  • 123L, -123L

양수 전용 64비트 숫자: unsigned long

  • 1UL, 123UL

16진수: 0x ...

  • 대소문자 구분 X
  • 0x1 = 1
  • 0x123 = 256+32+3 = 291

8진수: 0 ...

  • 0으로 시작하여 권장되지 않음
  • 01 = 1
  • 0123 = 83

2. 실수형 숫자

일반 실수

  • 1.23, -1.23

과학적 표현

  • 0.123e2 = 0.123 * 10²

부동 소수점 실수 (IEEE 754 규정)

  • 단정도: single precision floating point number (4바이트)
  • 배정도: double precision floating poing number (8바이트)

float

  • 유효 숫자 6~7자리
  • 범위: 10⁻³⁸ ~ 10³⁸

double

  • 유효 숫자 15~16자리
  • 범위: 10⁻³⁰⁸ ~ 10³⁰⁸

float, double 명시

  • 1.23F
  • 1.23L

부동 소숫점 계산은 하드웨어적으로 실행

  • float 실행 속도상 이득이 없음
  • 메모리 절약이 목표가 아니라면 double 이용

3. 문자와 문자열

문자: char(acter)

  • 'a'와 같이 '를 사용하여 한 문자로 표시
  • ASCII 값을 16진수로 지정 가능
16진수char
'\x61''a'
'\x31''1'
'\x00'0x00 = 0

문자열: 문자의 배열 (string)

  • "abc"와 같이 "를 사용하여 문자의 배열을 표시
  • 줄 바꿈을 통해 문자열을 지정하기 위해 줄 마지막에 \를 지정

    "abc\
    xyz" -> "abcxyz"

'와 "의 탈출문자 \

  • \는 다음에 오는 문자에 따라 의미를 지정하기 위한 특수문자
의미
\x16진수 지정
\nnewline
\rcarrige return
\ttab
\vverticla tab
\bbell
\"겹따옴표
\'홑따옴표
\\\ 자체를 표시

4. 추가된 자료형

void

void a; // 오류 발생!
  • return 값이 없는 함수
  • 자료형이 명시되지 않은 포인터

signed

  • 정수는 기본적으로 음수도 지정
  • 문자는 기본적으로 양수만 지정
  • 문자를 숫자로 사용하는 것을 허용하기 위해 도입

논리형: _Bool

  • ANSI C에서는 0은 거짓, 나머지는 무조건 참
  • FORTRAN 등 다른 언어에 의해 추후 영향을 받아 도입

복소수형: _Complex, _Imaginary

  • FORTRAN 등 복소수가 지원되는 언어에 의해 영향받아 도입
  • 2개의 실수를 묶어 지정하는 구조체 or 배열로 대체 가능

작명법

  • 기존 프로그램에서 사용된 bool, complex, imaginary 명칭과 충돌 가능성
  • 다소 생소한 작명법으로 충돌 방지

5. 자료형 지정

선언

int n; // 변수 선언
const int N = 10; // 상수 선언
int a[N]; // 배열 선언
int f();
void g(); // 함수 선언
int f(int a, const void* p); // 함수 인자 선언
void g()
{
} // 함수 정의

6. 연산자

산술 지정 연산자

  • 지정 연산자 + 산술 연산자
  • 다양한 형태의 지정 연산자를 정의

증가, 감소 연산자

7. 자료형 변환

자료형 변환

  • 연산자 좌우 자료형이 맞지 않으면 자동으로 자료형 변환
  • 자료형 크기가 큰 쪽으로 맞춤: 자료형 승격

    결과는 double
    1+2.3 -> 1.0 + 2.3
    결과는 int
    '\x30'+1 -> 0x30+1 -> '\x31'

함수 호출

  • 함수 인자를 인수에 지정하는 의미를 내포: call by value
  • char 포함 정수형은 모두 int로 승격
  • 실수형은 모두 double로 승격
profile
올해는 진짜 갓생 산다

0개의 댓글