함수(Function)
프로그래밍 언어에서 함수란, 코드뭉치를 뜻한다
반복되는 코드 뭉치가 있다면 해당 코드 뭉치를 함수로 만들어 재사용성을 높힐 수 있으며 입력, 출력이 있는 경우 대부분 다 함수라 칭한다. ex ) pinrtf() 함수다, main() 역시 함수다.
함수의 필요성
함수를 모르거나 없었다면 어떠한 함수를 사용할때 내부 코드까지 적어서 사용해야 한다.
반환자료형 함수명(매개변수자료형 매개변수명) // 함수 선언(Declaration)이자, 정의(Definition)
{
return 반환값;
}
int main(void)
{
int num = 10; // 자료형 변수명 = 값;
함수명(인자값); // 함수 호출(Call)
return 0;
}
main() 함수
// Main.c
#include <stdio.h> // print 외에 많은 함수들이 담긴 공구함
int main(void) // 반환자료형 함수명 (매개변수자료형)
{
int A = 1; // 자료형 변수 = 값
printf("%d", A); // 함수명(인자값) - print 호출
return 0; // return 반환값; - main 함수 종료
}
PrintOneStar() 함수
// Main.c
#include <stdio.h>
void PrintOneStar(void)
{
printf(" * ");
return;
}
int main(void)
{
PrintOneStar();
return 0;
}

Add() 함수
// Main.c
#include <stdio.h>
int Add(int A, int B)
{
return A + B;
}
int main(void)
{
printf("%d ", Add(10, 20));
return 0;
}

// Main.c
#include <stdio.h>
int Add(int A, int B)
{
int Result = A + B;
return Result;
}
int main(void)
{
int Result = Add(20, 20);
printf("%d ", Result);
return 0;
}

스택 프레임
스코프
- 블록 스코프 - 중괄호 내부에 선언된 변수는 해당 중괄호 내부에서만 사용할 수 있다. 조건문 ,반복문 같은 문에 사용되는 중괄호 범위도 여기에 해당되며 블록 스코프 안에 블록 스코프, 마트료시카 처럼 들어갈 수 있다. 바깥에선 해당 블록스코프에 접근이 불가능하다.
- 파일 스코프 - 블록 스코프 외부. 즉 블록 스코프들 내부에 속해있지 않는 것을 말한다.
// Main.c
#include <stdio.h>
int main(void)
{
int Num1 = 10;
{
int Num2 = 20;
printf("%d, %d ", Num1, Num2);
}
Num1 = 30;
printf("%d ", Num1);
return 0;
}
- 내부에서는 중괄호 밖에 있는 변수를 가져다 사용이 가능하다.
- 외부에서는 중괄호 내부의 변수를 가져올 수 없다.
// Main.c
#include <stdio.h>
int main(void)
{
int Num1 = 400;
{
int Num1 = 10;
int Num2 = 20;
printf("%d, %d ", Num1, Num2);
}
printf("%d ", Num1);
return 0;
}
- 변수 가리기라 하며 같은 변수명이면 가장 가까운 스택 메모리를 먼저 찾아 실행하기에 필요할때 외부에 있는 변수를 가져다 쓸 수 없기에 사용하지 않는 것이 좋다.
파일 스코프
- 다른 중괄호, 함수에 속해 있지 않고 파일에 속해 있는 것
- 파일 내부에서 라면 어디서든 불러서 사용 가능하다.
전방 선언 (Forward Declaration)
// Main.c
#include <stdio.h>
int Forward(int A, int B); // 전방 선언
int main(void)
{
printf("%d ", Forward(7, 7));
return 0;
}
int Forward(int A, int B) // 본체는 이곳!
{
return A + B;
}
- 함수의 머리부분만 따서 파일 스코프 상단에 두고 함수의 정의는 파일 스코프 하단에 위치 시키는 방법이다
- 이유가 있다고 하니 추후에 배우면 추가하겟다!
지역 변수
// Main.c
#include <stdio.h>
int Add(int A, int B);
int main(void)
{
printf("%d", Result); // 지역 변수를 가져올 수 없으니 사용 안됨
printf("%d", Add(2,2));
return 0;
}
int Add(int A, int B)
{
int Result = A + B; // Add 함수 안 변수로 지역 변수
return Result;
}
- Result는 Add() 함수 안에서 선언된 변수이므로 지역변수이다.
- main() 함수 안에서 int Result = Add(2,2); 로 선언과 동시에 함수 호출을 하거나 아니면 아래 처럼 사용한다.
정적 지역 변수
// Main.c
#include <stdio.h>
void Add(void);
int main(void)
{
Add();
return 0;
}
void Add(void)
{
static int Num = 0;// 함수가 사라져도 값이 유지가 된다.
++Num;
printf("%d", Num);
}
- 정적 지역 변수는 함수가 실행이 끝나고 종료되어도 해당 값이 유지된다.
전역 변수
- 파일 스코프에 선언된 변수, 데이터 섹션에 저장된다.
- static 자료형 변수명; 을 선언하게되면 "정적 전역 변수" 라하며 해당 변수는 파일 내에서만 접근 가능하다.
const
- const int A = 10; 이라 선언하게 되면 이 변수는 초기화 이후에 값을 변경할 수 없는 변수가 된다.
'학습일지 > C와 C++' 카테고리의 다른 글
| C/C++ 지금까지 배운 C 문법 활용해보기! (0) | 2026.03.06 |
|---|---|
| C/C++ 상태창 구현<과제> (0) | 2026.03.06 |
| C/C++ 배열 (0) | 2026.03.05 |
| C/C++ 반복문 (0) | 2026.03.04 |
| C/C++ 조건문 (0) | 2026.03.04 |