정보처리기사/[흥달쌤] 실기_깨알 C언어

C언어 특강 / 01. 프로그래밍이란?, 02. 컴파일러&인터프리터, 03. 변수, 04. 변수의 종류와 유효범위

web_seul 2022. 5. 2. 17:35
반응형

01. 프로그래밍이란?

* 프로그램 동작과정 : 선언 -> 입력 -> 처리 -> 출력

흥달쌤

 

* 예제 - 아침에 비가 오면 우산을 가져가고 비가오지않으면 자전거를 타고간다.

int 자전거, 우산;
if(날씨 == "비"){
  printf("우산");
}else{
  printf("자전거");
}

 

02. 컴파일러&인터프리터

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

 

* C언어 컴파일 과정 

.c -[전처리기] -> .i -[컴파일러]-> .s -[어셈블러]-> .o -[링커]-> .EXE

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

 

* 컴파일러  (ex. C, C++, JAVA 등)

- 고급언어로 작성된 프로그램을 컴퓨터에서 실행하기 위해 컴퓨터가 이해할 수 있는 언어로 번역

- 전체를 번역하므로 번역시간이 오래걸리지만 한번 번역한 후에는 다시 번역하지 않으므로 실행속도가 빠름

* 인터프리터 (ex. Ruby, php, javascript, Basic)

- 고급언어로 작성된 프로그램을 한 줄씨 읽어들여서 실행하는 프로그램

- 번역과 실행이 동시에 이루어지므로 별도의 실행파일이 존재하지 않음

 

03. 변수

* 변수 : 데이터를 저장할 수 있는 메모리의 기억공간 -> 효율적

* 변수생성 규칙 및 특징

- 예약어(키워드는) 사용할 수 없음

- 공백을 포함할 수 없음

- 첫 글자는 영문과 언더바(_)만 사용 가능

- 언더바(_)이외의 특수문자는 사용할 수 없음

- 대소문자를 구분함

 

* 데이터타입(자료형)

자료형 메모리크기 데이터 범위
문자형 char 1Byte -128 ~ + 127
정수형 short 2Byte -32768 ~ +32767
int 4Byte -2147483648 ~ 2147483647
long 4Byte -2147483648 ~ 2147483647
실수형 float 4Byte ~
double 8Byte ~

 

* 변수선언

int 변수명;

int 변수명=초기값;

 

04. 변수의 종류와 유효범위

* 지역변수

- 함수/블록 안에서 선언하는 변수

- 함수/블록의 종료와 함께 메모리상에서 소멸

- 초기값이 없으면 쓰레기 값이 들어감

- 스택 영역에 저장됨

void main(){
  if(1){
    int num1=10;
    printf("%d", num1);	//10;
  }			//num1의 변수값이 소멸됨
  printf("%d", num1);	//error
}

* 전역변수

- 함수 블록밖에서 선언하며 전체 함수에 영향을 미침

- 프로그램이 종료될때 메모리상에서 소멸됨

- 초기값이 없으면 0값이 들어감

- 데이터 영역에 저장됨

int num1;
void main(){
  num1 = 10;
  printf("%d", num1);	//10
  func();
  printf("%d", num1);	//20
}
void func(){
  num1 = 20;	//num에 20을 재할당
}

* 정적변수

- static으로 선언하며 선언된 블록내에서만 사용가능

- 함수가 종료되어도 소멸되지않고 값이 그대로 유지됨

- 프로그램이 종료될때 메모리상에서 소멸

- 초기값이 없으면 0이 입력되고 단 한번만 초기화

- 데이터 영역에 저장됨

void main(){
  add(10);
  add(5);
  add(3);
}

//add(10)
int add(int i){			//i=10;
  static int sum = 0;		//sum은 static임을 선언함
  sum = sum + i;		//0+10
  printf("sum:%d\n", sum);	//sum: 10
}

//add(5)
int add(int i){			//i=5;
  static int sum = 0; 		//무시, static으로 선언한 함수는 1회만 초기화되므로 sum=10;
  sum = sum + i;		//10+5
  printf("sum:%d\n", sum);	//sum: 15
}

//add(3)
int add(int i){			//i=3;
  static int sum = 0;		//무시
  sum = sum + i;		//15+3
  printf("sum:%d\n", sum);	//sum: 18
}

//sum: 10
//sum: 15
//sum: 18

* 동적변수

- 메모리 동적할당으로 생성되는 변수

- Run time 시간에 메모리를 할당

- 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적

- 무조건 포인터를 사용해야함

- 힙 영역에 저장됨

 

반응형