학습일지/C와 C++

C/C++ 함수

Tsukino Ren 2026. 3. 5. 19:46

함수(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