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 시간에 메모리를 할당
- 동적 기억장소에 할당하여 메모리 낭비를 피하려는 목적
- 무조건 포인터를 사용해야함
- 힙 영역에 저장됨