C에서 함수에 매개변수로 함수를 전달할 수 있습니까?
12105 단어 cppclinuxprogramming
예! 이것은 C/C++에서도 가능하지만 약간 다른 방식입니다. 우리는 C/C++에서 포인터로 메모리 주소에 접근할 수 있다는 것을 알고 있습니다. 따라서 포인터를 사용하여
array
, int
, char
또는 다른 데이터 유형에 대해 수행하는 것과 동일한 함수를 가리킬 수도 있습니다.아주 간단한 프로그램부터 시작해 봅시다.
암호
#include<stdio.h>
int add(int a, int b) {
return a+b;
}
// function as param
// ___________^_____________
int do_operation(int (* operation)(int, int), int a, int b) {
return operation(a, b);
}
int main(int argc, char const *argv[])
{
printf("%d\n", do_operation(add, 10, 20));
return 0;
}
산출
30
위의 코드에서 함수 do_operation에서 무슨 일이 일어나고 있습니까?
매개변수
int (* operation)(int, int)
는 이름이 operation
인 함수 시그니처입니다. 그것에 대해 더 설명하겠습니다. int (* operation) (int, int)
^ ^ ^
left identifier right
따라서 다음과 같이 함수를 선언할 수 있습니다.
return_type (* function_name) (param1, param2);
하지만 이 함수를 여러 함수에서 사용해야 한다면 어떻게 될까요? 모든 곳에서 이렇게 선언해야 할까요?
아니요. 생명의 은인
typedef
이 있습니다. 우리는 함수 서명을 typedef
할 수 있고 어디에서나 사용할 수 있습니다. 예를 들어 위의 함수 서명을 다음과 같이 선언할 수 있습니다.typedef int (* operation)(int, int);
int do_operation(operation op, int a, int b) {
return op(a, b);
}
이것은 매우 간단하고 읽기 쉽지 않습니까?
출처: freepik.com
이제 함수를 매개변수로 전달하는 것이 어떻게 유용할 수 있는지에 대한 복잡한 예를 살펴보겠습니다.
암호
#include <stdio.h>
/**
* Defining internal functions
*/
int _multiply(int a, int b) {
return a*b;
}
int _subtract(int a, int b) {
return a-b;
}
int _add(int a, int b) {
return a+b;
}
// Functions name
typedef enum {
ADD, SUBTRACT, MULTIPLY
} Operations;
// declaring function type
typedef int (*function_t)(int, int);
// struct to hold multiple functions
typedef struct {
Operations op;
char name[31];
function_t fun;
} Operation_t;
// Initialize functions array
Operation_t operations[] = {
{ADD, "Add", _add},
{SUBTRACT, "Subtract", _subtract},
{MULTIPLY, "Multiply", _multiply}
};
/**
* Function to do multiple operating by just function name
*/
void do_operation(Operations op, int a, int b) {
for (int i=0; i<sizeof(operations)/sizeof(Operation_t); i++) {
if (op == operations[i].op) {
printf("Operation: %s\n", operations[i].name);
printf("Result: %d\n\n", operations[i].fun(a, b));
return;
}
}
printf("Invalid Operation\n");
}
int main() {
// calling the with function name to perform operation
do_operation(ADD, 10, 20);
do_operation(SUBTRACT, 10, 20);
do_operation(MULTIPLY, 10, 20);
return 0;
}
산출
Operation: Add
Result: 30
Operation: Subtract
Result: -10
Operation: Multiply
Result: 200
위의 코드에서 함수 이름을 전달하기만 하면 실행할 수 있음을 알 수 있습니다.
This article is highly inspired by the content provided by Jacob Sorber on his .
❤️이 글을 읽어주셔서 정말 감사합니다. 저는 새로운 것을 배우는 열정적인 공대생이므로 실수를 발견하거나 제안할 사항이 있으면 댓글로 알려주세요.
또한 이 게시물이 어떤 식으로든 도움이 된다면 공유하고 엄지손가락을 치켜세우는 것을 고려하십시오.
Reference
이 문제에 관하여(C에서 함수에 매개변수로 함수를 전달할 수 있습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/namantam1/can-we-pass-a-function-to-a-function-in-c-as-a-parameter-g79텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)