저는 약간의 코드를 연구 해왔고 이해할 수있는 약간의 코드를 발견했습니다. 그러나 왜 그렇게했는지는 생각할 수 없습니다. 왜 함수 포인터로 포인터를 캐스팅해야합니까?
나는 아래의 코드의 상황을 재현 :include <stdio.h>
void printsum(int x, double y)
{
printf("Soma: %.2f\n", (double)x + y);
}
typedef int int_alias;
typedef void (* funcptr) (int_alias x, double y);
typedef void (* fptr) (int x, double y);
fptr pptr = &printsum;
#define A_MACRO(x, y) ((funcptr) (pptr)) (x, y)
int main()
{
int a = 10;
double b = 2.2;
A_MACRO(a, b);
/* ((funcptr) (pptr)) (a, b); */
return 0;
}
이벤트가 발생하고 매크로를 호출 할 때이 작업이 완료되기 때문에, 인쇄 기능이 콜백 함수입니다.
내가 이해하지 못하는 것은 매크로 때문에 일어나는 주조입니다. pptr
은 이미 함수 포인터이므로 funcptr
으로 다시 캐스팅하는 이유는 무엇입니까?
저는 이런 종류의 건축에 익숙하지 않습니다. 그래서 내가 누락 된 부분 일 수 있습니다. 누군가 이것에 관해 어떤 것을 알려줄 수 있습니까?
결과는이 캐스팅없이 동일하게 나타날 것이라고 생각합니다. –
이상하게 보입니다 ... 원본 코드에 대한 링크를 공유 할 수 있습니까? – mafso
'#define A_MACRO (x, y) (pptr) (x, y)'도 작동합니다. 주조가 필요하지 않습니다. 이 경우에는 코드의 가독성을 향상시키기 위해 수행됩니다. –