logo

C 함수

C의 함수 호출될 때 특정 작업을 수행하는 명령문 세트입니다. 이는 모듈성과 코드 재사용성을 제공하는 C 프로그램의 기본 빌딩 블록입니다. 함수의 프로그래밍 명령문은 다음 안에 포함됩니다. { } 중괄호 , 특정 의미를 가지며 특정 작업을 수행합니다. 다른 언어에서는 서브루틴 또는 프로시저라고도 합니다.

이번 글에서는 함수, 함수 정의에 대해 알아보겠습니다. 선언, 인수 및 매개변수, 반환 값 등이 있습니다.

C의 함수 구문

함수의 구문은 3가지 측면으로 나눌 수 있습니다.



    함수 선언 함수 정의 함수 호출

함수 선언

함수 선언에서는 함수 이름, 반환 유형, 매개변수의 수와 유형을 제공해야 합니다. 함수 선언은 주어진 이름을 가진 함수가 프로그램의 다른 곳에 정의되어 있음을 컴파일러에게 알려줍니다.

통사론

return_type name_of_the_function  ( parameter_1 , parameter_2 );>

함수를 선언할 때 매개변수 이름은 필수가 아닙니다. 데이터 변수의 이름을 사용하지 않고 함수를 선언할 수도 있습니다.

int sum (int a , int b ); int sum (int , int);>
함수 선언

함수 선언

메모: C의 함수는 호출하기 전에 항상 전역적으로 선언되어야 합니다.

기능 정의

함수 정의는 함수가 호출될 때(즉, 프로그램 제어가 함수에 올 때) 실행되는 실제 명령문으로 구성됩니다.

C 함수는 일반적으로 단일 단계로 정의 및 선언됩니다. 함수 정의는 항상 함수 선언으로 시작하므로 명시적으로 선언할 필요가 없습니다. 아래 예제는 함수 정의와 선언 역할을 모두 수행합니다.

return_type function_name (para1_type  para1_name,  para2_type  para2_name ) { // body of the function }>
C의 함수 정의

C의 함수 정의

함수 호출

함수 호출은 컴파일러에게 함수를 실행하도록 지시하는 명령문입니다. 함수 호출에는 함수 이름과 매개변수를 사용합니다.

아래 예에서는 첫 번째 합계 함수가 호출되고 10,30이 합계 ​​함수에 전달됩니다. a와 b의 함수 호출 합계가 반환되고 제어권도 프로그램의 기본 함수로 다시 반환됩니다.

C의 함수 작동

C의 함수 작동

메모: 함수 정의에 프로그램 제어를 가져오려면 함수 호출이 필요합니다. 호출되지 않으면 함수 명령문이 실행되지 않습니다.

C 함수의 예




// C program to show function> // call and definition> #include> // Function that takes two parameters> // a and b as inputs and returns> // their sum> int> sum(>int> a,>int> b)> {> >return> a + b;> }> // Driver code> int> main()> {> >// Calling sum function and> >// storing its value in add variable> >int> add = sum(10, 30);> > >printf>(>'Sum is: %d'>, add);> >return> 0;> }>

>

인 키
>

산출

Sum is: 40>

앞서 살펴본 것처럼 명시적인 함수 선언을 사용하지 않았습니다. 우리는 간단히 함수를 정의하고 호출했습니다.

함수 반환 유형

함수 반환 유형은 모든 함수가 실행된 후 반환되는 값의 유형을 나타냅니다. 값을 반환하고 싶지 않으면 void 데이터 유형을 사용할 수 있습니다.

예:

int func(parameter_1,parameter_2);>

위 함수는 함수 내에서 명령문을 실행한 후 정수 값을 반환합니다.

메모: C 함수에서는 하나의 값만 반환될 수 있습니다. 여러 값을 반환하려면 포인터나 구조체를 사용해야 합니다.

함수 인수

함수 인수(함수 매개변수라고도 함)는 함수에 전달되는 데이터입니다.

예:

피트 데이비슨
int function_name(int var1, int var2);>

반환 유형 및 인수 조건

C 프로그래밍 언어에서 함수는 인수를 사용하거나 사용하지 않고 호출할 수 있으며 값을 반환할 수 있습니다. 호출 함수에 값을 반환할 수도 있고 반환하지 않을 수도 있습니다.

  1. 인수도 없고 반환 값도 없는 함수
  2. 인수가 없고 반환 값이 있는 함수
  3. 인수가 있고 반환 값이 없는 함수
  4. 인수와 반환 값이 있는 함수

함수 인수 및 반환 값에 대한 자세한 내용은 C의 함수 인수 및 반환 값 문서를 참조하세요.

C 함수는 어떻게 작동하나요?

C 함수의 작업은 아래와 같이 다음 단계로 나눌 수 있습니다.

    함수 선언: 함수 선언은 함수를 선언하는 단계입니다. 여기서는 함수의 반환 유형과 매개변수를 정의합니다.
  1. 함수 정의:
  2. 함수 호출: 함수 호출은 함수에 인수를 전달하여 함수를 호출하는 단계입니다. 함수 실행: 함수 실행은 함수 내부의 모든 명령문을 실행하여 최종 결과를 얻을 수 있는 단계입니다. 값 반환 : 값 반환은 함수 실행 후 계산된 값을 반환하는 단계입니다. 함수 종료는 주 함수에 대한 전체 제어권을 부여하기 전에 변수, 함수 등에 할당된 모든 메모리가 파괴되는 마지막 단계입니다.

기능 유형

C에는 두 가지 유형의 함수가 있습니다.

    라이브러리 함수 사용자 정의 함수
기능 유형

C의 함수 유형

1. 라이브러리 기능

라이브러리 함수라고도 합니다. 내장 기능 . 이러한 함수를 포함하는 컴파일러 패키지가 이미 존재하며 각 함수는 특정 의미를 가지며 패키지에 포함되어 있습니다. 내장 함수는 정의하지 않고도 바로 사용할 수 있다는 장점이 있는 반면, 사용자 정의 함수는 선언하고 정의해야 사용할 수 있다는 장점이 있다.

예를 들어:

pow(), sqrt(), strcmp(), strcpy() etc.>

C 라이브러리 함수의 장점

  • C 라이브러리 함수는 사용하기 쉽고 더 나은 성능을 위해 최적화되었습니다.
  • C 라이브러리 함수는 많은 시간, 즉 함수 개발 시간을 절약해 줍니다.
  • C 라이브러리 함수는 항상 작동하므로 편리합니다.

예:




// C program to implement> // the above approach> #include> #include> // Driver code> int> main()> {> >double> Number;> >Number = 49;> >// Computing the square root with> >// the help of predefined C> >// library function> >double> squareRoot =>sqrt>(Number);> > >printf>(>'The Square root of %.2lf = %.2lf'>,> >Number, squareRoot);> >return> 0;> }>

>

>

산출

The Square root of 49.00 = 7.00>

2. 사용자 정의 함수

프로그래머가 생성하는 함수는 사용자 정의 함수 또는 맞춤형 기능 . 사용자 정의 함수는 프로그래머의 필요에 따라 개선되고 수정될 수 있습니다. 헤더 파일에 정의되지 않은 대소문자별 함수를 작성할 때마다 구문에 따라 자체 함수를 선언하고 정의해야 합니다.

사용자 정의 함수의 장점

  • 변경 가능한 기능은 필요에 따라 수정할 수 있습니다.
  • 이러한 기능의 코드는 다른 프로그램에서 재사용할 수 있습니다.
  • 이러한 기능은 이해, 디버그 및 유지 관리가 쉽습니다.

예:




// C program to show> // user-defined functions> #include> int> sum(>int> a,>int> b)> {> >return> a + b;> }> // Driver code> int> main()> {> >int> a = 30, b = 40;> > >// function call> >int> res = sum(a, b);> >printf>(>'Sum is: %d'>, res);> >return> 0;> }>

>

>

산출

Sum is: 70>

매개변수를 함수에 전달하기

함수가 호출될 때 전달되는 데이터를 실제 매개변수라고 합니다. 아래 프로그램에서는 10과 30이 실제 매개변수로 알려져 있습니다. 형식 매개변수는 함수 선언에 언급된 변수와 데이터 유형입니다. 아래 프로그램에서 a와 b는 형식 매개변수로 알려져 있습니다.

매개변수를 함수에 전달하기

매개변수를 함수에 전달하기

두 가지 방법으로 C 함수에 인수를 전달할 수 있습니다.

  1. 값으로 전달
  2. 참조로 전달

1. 값으로 전달

이 메서드에 전달되는 매개변수는 실제 매개변수의 값을 형식 함수 매개변수로 복사합니다. 결과적으로 함수 내부의 변경 사항은 호출자의 매개 변수에 반영되지 않습니다.

예:




// C program to show use> // of call by value> #include> void> swap(>int> var1,>int> var2)> {> >int> temp = var1;> >var1 = var2;> >var2 = temp;> }> // Driver code> int> main()> {> >int> var1 = 3, var2 = 2;> >printf>(>'Before swap Value of var1 and var2 is: %d, %d '>,> >var1, var2);> >swap(var1, var2);> >printf>(>'After swap Value of var1 and var2 is: %d, %d'>,> >var1, var2);> >return> 0;> }>

>

>

우분투 빌드 필수
산출

Before swap Value of var1 and var2 is: 3, 2 After swap Value of var1 and var2 is: 3, 2>

2. 참조로 전달

호출자의 실제 매개변수와 함수의 실제 매개변수는 동일한 위치를 참조하므로 함수 내부에서 변경된 내용은 호출자의 실제 매개변수에 반영됩니다.

예:




// C program to show use of> // call by Reference> #include> void> swap(>int> *var1,>int> *var2)> {> >int> temp = *var1;> >*var1 = *var2;> >*var2 = temp;> }> // Driver code> int> main()> {> >int> var1 = 3, var2 = 2;> >printf>(>'Before swap Value of var1 and var2 is: %d, %d '>,> >var1, var2);> >swap(&var1, &var2);> >printf>(>'After swap Value of var1 and var2 is: %d, %d'>,> >var1, var2);> >return> 0;> }>

>

>

산출

Before swap Value of var1 and var2 is: 3, 2 After swap Value of var1 and var2 is: 2, 3>

C 함수의 장점

C의 함수는 아래와 같이 많은 장점을 지닌 매우 유용한 C 기능입니다.

  1. 이 기능은 프로그램에서 동일한 명령문의 반복을 줄일 수 있습니다.
  2. 이 함수는 프로그램에 모듈성을 제공하여 코드를 읽을 수 있게 만듭니다.
  3. 호출 함수의 수는 정해져 있지 않으며 원하는 만큼 호출할 수 있습니다.
  4. 이 기능은 프로그램의 크기를 줄입니다.
  5. 함수가 선언되면 함수의 내부 작동에 대해 생각하지 않고 함수를 사용할 수 있습니다.

C 함수의 단점

C 함수의 주요 단점은 다음과 같습니다.

  1. 여러 값을 반환할 수 없습니다.
  2. 스택 프레임 할당 및 프로그램 제어 전송으로 인한 메모리 및 시간 오버헤드입니다.

결론

이 기사에서는 아래에 언급된 함수에 대해 다음 사항을 논의했습니다.

자바 댓글
  1. 함수는 프로그램 내에서 원하는 만큼 재사용할 수 있는 코드 블록입니다.
  2. 함수를 사용하려면 함수를 호출해야 합니다.
  3. 함수 선언에는 function_name, 반환 유형 및 매개변수가 포함됩니다.
  4. 함수 정의에는 함수 본문이 포함됩니다.
  5. 함수에는 사용자 정의 함수와 라이브러리 함수 두 가지가 있습니다.
  6. 함수에서는 전달된 값에 따라 값에 의한 호출과 참조에 의한 호출의 두 가지 유형에 따라 수행할 수 있습니다.

C의 함수에 대한 FAQ

Q1. 기능을 정의합니다.

답변:

함수는 프로그램 실행 중에 호출될 때마다 실행되는 코드 블록입니다.

Q2. 전방 선언이란 무엇입니까?

답변:

때로는 더 나은 가독성을 제공하기 위해 호출 후에 함수를 정의합니다. 이러한 경우 정의 및 호출 전에 함수를 선언합니다. 이러한 선언을 전방 선언(Forward Declaration)이라고 합니다.

Q3. 함수 선언과 정의의 차이점은 무엇입니까?

답변:

함수 이름, 반환 유형, 매개변수와 같은 데이터는 함수 선언에 포함되는 반면 정의는 함수의 본문입니다. 이러한 모든 데이터는 해당 단계에 따라 컴파일러와 공유됩니다.

Q4. 함수 인수와 매개변수의 차이점은 무엇인가요?

답변:

함수 매개변수는 함수 선언에 선언된 값입니다. 반면, 함수 인수는 함수 호출 중에 함수에 전달되는 값입니다.

예:

 int func(int x,int y); func(10,20);>

여기서 int x와 int y는 매개변수이고, 10과 20은 함수에 전달되는 인수입니다.

이에 대한 자세한 내용은 C의 인수와 매개변수의 차이점 문서를 참조하세요.

Q5. C 함수에서 여러 값을 반환할 수 있나요?

답변:

아니요. 일반적으로 함수에서 여러 값을 반환하는 것은 불가능합니다. 하지만 우리는 다음 중 하나를 사용할 수 있습니다. 포인터 여러 값을 반환하기 위해 정적 또는 힙 메모리 위치로 이동하거나 구조 그런 다음 구조를 반환합니다.

이에 대한 자세한 내용은 이 문서 - C 또는 C++의 함수에서 여러 값을 반환하는 방법을 참조하세요.

Q6. 실제 매개변수와 형식 매개변수는 무엇입니까?

답변:

형식적인 매개변수: 함수 프로토타입에 선언된 변수를 형식 인수 또는 매개변수라고 합니다.

실제 매개변수: 함수에 전달되는 값을 실제 인수 또는 매개변수라고 합니다.