c 콜백함수 예제
예제를 통해 아이디어를 이해하는 것이 훨씬 쉽습니다. 지금까지 C의 콜백 함수에 대해 들었던 것은 좋은 대답이지만 이 기능을 사용하는 가장 큰 이점은 코드를 깔끔하고 깔끔하게 유지하는 것입니다. 코드에 약간의 설명이 필요합니다. 프로그램의 다른 부분에서 이벤트가 발생한 후 몇 가지 유용한 작업(오류 처리, 종료 전 마지막 정리 등)을 수행하는 콜백 함수를 호출해야 한다고 가정합니다. 첫 번째 단계는 콜백 함수를 호출해야 하는 다른 함수(예: register_callback)에 함수 포인터를 인수로 전달하는 콜백 함수를 등록하는 것입니다. 콜백에는 런타임시 데이터 흐름을 제어하는 방식이 다르며, 콜백 차단(동기 콜백 또는 콜백이라고도 함) 및 지연된 콜백(비동기 콜백이라고도 함)이 있습니다. 함수가 반환되기 전에 차단 콜백이 호출되지만(아래 C 예제에서는 차단 콜백을 보여 주지만 함수 main)에서는 함수가 반환된 후 지연된 콜백이 호출될 수 있습니다. 지연된 콜백은 I/O 작업 또는 이벤트 처리의 컨텍스트에서 자주 사용되며 인터럽트 또는 여러 스레드의 경우 다른 스레드에서 호출됩니다. 특성상 차단 콜백은 인터럽트 나 여러 스레드없이 작동 할 수 있으므로 차단 콜백은 일반적으로 다른 스레드에 동기화하거나 작업을 위임하는 데 사용되지 않습니다. 여기서 populate_array 함수는 함수 포인터를 세 번째 매개 변수로 사용 하며 배열을 채우는 값을 가져옵니다. 임의의 값을 반환하는 콜백 getNextRandomValue를 작성하고 포인터를 전달하여 채워지도록 했습니다. populate_array는 콜백 함수를 10번 호출하고 반환된 값을 지정된 배열의 요소에 할당합니다.
예를 들어, 서로 다른 값 유형으로 다른 링크드 목록을 처리해야 하는 프로그램을 작성해야 하는 경우 해당 유형의 값을 사용하여 연결된 목록에서 특정 유형의 지정된 값을 검색해야 한다고 가정해 보겠습니다. 문자열 값 등 목록에서 텍스트 문자열을 검색합니다. 콜백 함수를 사용하여 상위 계층 프로그램에서 호출되는 라이브러리를 만들 수도 있으며, 이에 따라 라이브러리는 일부 이벤트가 발생할 때 사용자 정의 코드를 호출합니다. 다음 소스 코드(insertion_main.c, insertion_sort.c 및 insertion_sort.h)는 간단한 삽입 정렬 라이브러리를 구현하는 데 사용되는 이 메커니즘을 보여 주며 있습니다. 유연성을 통해 사용자는 원하는 비교 함수를 호출할 수 있습니다. 따라서 pthread 함수와 같은 것이 있다면 인스턴스화에서 루프 내에서 실행하는 다른 함수를 할당 할 수 있습니다. 위의 코드를 단일 파일로 작성할 수 있지만 콜백 함수가 최상위 계층에 있고 호출할 함수가 다른 파일 계층에 있는 실제 사례를 시뮬레이션하기 위해 별도의 파일에 콜백 함수의 정의를 넣었습니다. 따라서 프로그램 흐름은 그림 1에서 볼 수 있는 것과 같습니다. 그림 47을 살펴본다. ArrayInit 함수는 요소 크기의 배열에 대한 포인터를 취한 다음 정수반환 함수에 대한 포인터도 취합니다.
이 시점에서 함수는 정의되지 않지만 응용 프로그램 코드에 의해 정의될 수 있습니다.