c언어 callback 함수 예제

함수 포인터 pfAddTwoNumber에 AddTwoNumber의 할당 주소 후 함수 포인터의 도움으로 함수를 호출할 수 있습니다. 위의 함수는 정수인 변수에 대한 포인터를 반환합니다. 이 함수는 이렇게 „int*를 반환하는 함수“라고 합니다. 마찬가지로 CB_DEFINE 매크로가 확장되어 콜백 함수 구현을 만듭니다. 매크로는 _CB_AddCallback() 및 _CB_Dispatch()와 같은 개인 함수 주위에 얇고 형식이 안전한 래퍼를 제공합니다. 잘못된 함수 서명을 등록하려고 하면 컴파일러가 오류 또는 경고를 생성합니다. 매크로는 일반적으로 손으로 작성하는 단조로운 상용구 코드를 자동화합니다. 이 것을 설명하기 위해 하나의 간단한 프로그램을 시도해 보겠습니다. 전체 프로그램에는 callback.c, reg_callback.h 및 reg_callback.c의 세 가지 파일이 있습니다.

위의 프로그램은 func() 간단한 방법을 호출합니다. 함수에 대한 포인터를 사용하여 호출하도록 프로그램을 수정해 보겠습니다. 다음은 변경된 main() 함수입니다: 함수 이름은 함수의 주소를 얻기 위해 사용되며, 이는 함수에서 함수 이름을 사용하여 함수 이름을 작성할 필요가 없습니다. 프로그램에서 함수 포인터를 호출하기 전에 유효성을 확인해야하며 함수 포인터의 유효성을 확인하는 것이 좋습니다. 대상 OS 태스크 이벤트 루프는 CB_CallbackMsg*를 해제하고 CB_TargetInvoke()를 호출합니다. 생성된 동적 데이터는 함수가 종료되기 전에 해제됩니다. 위의 코드를 단일 파일로 작성할 수 있지만 콜백 함수가 최상위 계층에 있고 호출할 함수가 다른 파일 계층에 있는 실제 사례를 시뮬레이션하기 위해 별도의 파일에 콜백 함수의 정의를 넣었습니다. 따라서 프로그램 흐름은 그림 1에서 볼 수 있는 것과 같습니다. 함수: void foo(int a, int b) – 두 개의 int 인수를 수락하고 아무 것도 반환하지 않습니다. 함수 포인터 : 보이드 (*foo)(int,int); 함수 포인터가 일반 포인터와 유사하다는 것을 이미 설명했습니다. 따라서 함수 포인터를 선언 한 후 일반 포인터처럼 정의해야합니다.

Share on Google+Share on FacebookTweet about this on Twitter