정보처리기사

[정보처리기사] C언어 특강 1~4강 정리

jaeheon0520 2024. 9. 10. 03:33

프로그램의 동작 과정

1. 선언

2. 입력

3. 처리

4. 출력

 

컴파일 이란?

인간이 만든 고급언어를 컴퓨터가 해석할 수 있는 저급언어로 번역

 

C언어 컴파일 과정

구분 기능 확장자
전처리기 전처리 구문을 처리하는 과정
ex) #include<stdio.h>
.c
컴파일러 고수준 언어를 저수준 언어로 변환
기계어와 가장 가까운 형태의 언어
.i
어셈블러 완전히 기계어로 바꾸어 주는 역할 .o
링커 여러 개의 오브젝트 파일을 합치거나, 라이브러리를 합치는 역할 .exe

 

컴파일러

  • 고급 언어로 작성된 프로그램을 컴퓨터에서 실행하기 위해 컴퓨터가 이해할 수 있는 언어로 번역
  • 전체를 번역하므로, 번역시간이 오래 걸리지만 한 번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠름
  • 종류: C, C++, JAVA, 등

인터프리터

  • 고급 언어로 작성된 프로그램을 한 줄씩 읽어 들여서 실행하는 프로그램 -> 통역
  • 번역과 실행이 동시에 이루어지므로, 별도의 실행파일이 존재하지 않는다.
  • 종류: Ruby, php, javascript, Basic

변수생성 규칙 및 특징

  • 예약어(키워드)는 사용할 수 없다
  • 공백을 포함할 수 없다
  • 첫 글자는 영문과 언더바(_)만 사용이 가능하다 (첫 글자에 숫자 사용 불가)
  • 언더바(_) 이외의 특수문자는 사용할 수 없다 

메모리 크기

  • 문자형 char = 1byte(C), 2byte(java) ← 유니코드 사용
  • 정수형 short = 2byte, int = 4byte, long = 4byte
  • 실수형 float = 4byte, double = 8byte

변수의 종류

1. 지역변수

  • 함수/블록 안에서 선언하는 변수
  • 함수/블록의 종료와 함께 메모리상에서 소멸(☆)
  • 초기값이 없으면 쓰레기 값이 들어감
  • 스택 영역에 저장됨
void main() {
    if(1) {
		int num1 = 10;
        printf("%d", num1); // 10
    }
    printf("%d", num1); // 이거 때문에 오류남
}

 

2. 전역변수

  • 함수 블록 밖에서 선언하며 전체 함수에 영향을 미친다.
  • 프로그램이 종료될 때 메모리상에서 소멸된다
  • 초기값이 없으면 0 값이 들어감
  • 데이터 영역에 저장됨
int num1;
void main() {
    num1 = 10; // 전역변수에 대입
    printf("%d", num1); // 10
    func(); // num1 → 20
    printf("%d", num1); // 1020
}
void func() {
    num1 = 20;
}

 

3. 정적변수

  • static 으로 선언하며 선언된 블록 내에서만 사용가능
  • 함수가 종료되어도 소멸되지 않고, 값이 그대로 유지됨
  • 프로그램이 종료될 때 메모리 상에서 소멸
  • 초기값이 없으면 0이 입력되고, 단 한번만 초기화
  • 데이터 영역에 저장됨
void main() {
    add(10);
    add(5);
    add(3);
}

int add(int i) {
	static int sum = 0; // 최초 한번만 초기화
    sum += i; // 10 → 15 → 18
    printf("sum: %d\n", sum); // 10\n 15\n 18\n
}

//static이 아니라 그냥 지역변수라면 10\n 5\n 3\n

 

4. 동적변수

  • 메모리에 동적할당으로 생성되는 변수
  • Run time 시간에 메모리를 할당
  • 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적
  • 무조건 포인터를 사용해야 함
  • 힙 영역에 저장됨