
Q. 입력 안내에 따라 두 사람의 나이를 입력받고, 그 합을 구하는 C 프로그램을 작성하려고 한다.
ㄱ. scanf("%d%d", &age1, &age2);
ㄴ. result = age1 + age2;
ㄷ. int age1, age2, result
ㄹ. printf("나이의 합은 %d살입니다. \n", result);
ㅁ. printf("철수와 영희의 나이를 입력하세요.");
ㄷ -> ㅁ -> ㄱ -> ㄴ -> ㄹ
프로그램 동작 과정: 선언 -> 입력 -> 처리 -> 출력
컴파일: 인간이 만든 고급언어를 컴퓨터가 해석할 수 있는 저급언어로 번역하는 것
c언어 컴파일 과정: .c -> 전처리기 -> .i -> 컴파일러 -> .s -> 어셈블러 -> .o -> 링커 -> .EXE
컴파일러
인터프리터
- 고급언어로 작성된 프로그램을 한줄씩 읽어들여서 실행하는 프로그램
Q. C 프로그램을 컴파일 하면 아래와 같은 것들이 실행된다. 수행 순서를 올바르게 나열하시오.
ㄱ. 링커(linker)
ㄴ. 어셈브러(assembler)
ㄷ. 전처리기(preprocessor)
ㄹ. 컴파일러(compiler)
A)
ㄷ -> ㄹ -> ㄴ -> ㄱ
해설)
전처리기 -> 컴파일러 -> 어셈블러 -> 링커


변수: 데이터를 저장할 수 있는 메모리의 기억공간
변수를 사용할 때는, 항상 효율적(메모리 낭비 피하는 것)으로 사용해야 한다.
변수생성 규칙 및 특징
변수 선언
#include <stdio.h>
void add(int i) {
int sum = 0; // 지역 변수 sum 선언 및 초기화
sum += i;
printf("sum: %d\n", sum);
}
void main() {
add(10);
add(5);
add(3);
}
출력:
sum: 10
sum: 5
sum: 3
#include <stdio.h>
// 전역 변수 선언 및 초기화
int global_sum = 0;
void add(int i) {
global_sum += i;
printf("global_sum: %d\n", global_sum);
}
int main() {
add(10);
add(5);
add(3);
return 0;
}
출력:
global_sum: 10
global_sum: 15
global_sum: 18
#include <stdio.h>
int add(int i) {
static int sum = 0; // 정적 변수 sum 선언 및 초기화
sum += i;
printf("sum: %d\n", sum);
return sum; // 반환값 추가
}
void main() {
add(10);
add(5);
add(3);
}
출력:
sum: 10
sum: 15
sum: 18
전역 변수 (Global Variable)
스코프(유효 범위):
전역 변수는 프로그램의 모든 함수에서 접근할 수 있다.
즉, 전역 변수는 프로그램 전체에서 유효합니다.
수명(생존 기간):
전역 변수는 프로그램 시작 시 생성되고, 프로그램 종료 시 소멸된다.
프로그램이 실행되는 동안 메모리에 유지된다.
메모리 영역:
전역 변수는 데이터 영역에 저장된다.
정적 변수 (Static Variable)
스코프(유효 범위):
정적 변수는 선언된 함수나 블록 내부에서만 유효하다.
즉, 정적 변수는 해당 함수나 블록 내에서만 접근할 수 있다.
다른 함수나 블록에서는 해당 변수를 참조할 수 없다.
수명(생존 기간):
전역 변수는 프로그램 시작 시 생성되고, 프로그램 종료 시 소멸된다.
프로그램이 실행되는 동안 메모리에 유지된다.
메모리 영역:
정적 변수도 데이터 영역에 저장된다.
#include <stdio.h>
#include <stdlib.h>
void demonstrateDynamicVariable() {
// 동적 변수 선언 및 메모리 할당
int *dynamic_var = (int*)malloc(sizeof(int));
if (dynamic_var == NULL) {
printf("Memory allocation failed\n");
return;
}
// 동적 변수 초기화
*dynamic_var = 20;
// 동적 변수 값 출력
printf("Value of dynamic_var: %d\n", *dynamic_var);
// 메모리 해제
free(dynamic_var);
}
int main() {
// demonstrateDynamicVariable 함수 호출
demonstrateDynamicVariable();
return 0;
}
demonstrateDynamicVariable 함수 내에서 dynamic_var이라는 동적 변수를 선언하고 malloc을 사용하여 메모리를 할당.
메모리 할당 실패 시 오류 메시지를 출력하고 함수 종료.
동적 변수에 값 20을 할당.
동적 변수의 값을 출력.
함수가 종료되기 전에 free를 사용하여 동적 메모리를 해제.
Value of dynamic_var: 20