가능한 중복 다음 통해 호출하는 경우
Casting a function pointer to another typeC에서 정의 된 함수 포인터를 통해 추가 매개 변수를 전달합니까?
이 기능은 여전히 제대로 수행, 내가 실제로 다음 함수 포인터 정의를 적은 매개 변수를받는 함수와 함수 포인터를 초기화 가정 함수 포인터?
나는 GCC와 함께이 시도 예상대로 일했다,하지만 난 그 행동이 (내가 그것을 스택에 위력을 과시 수있는 몇 가지 enviroments에에 의심) 컴파일러/플랫폼에서 일관성이 궁금 :#include <stdio.h>
typedef void (*myfun)(int, int, int);
void test_a(int x, int y, int z) {
printf("test_a %d %d %d\n", x, y, z);
}
void test_b(int x, int y) {
printf("test_b %d %d\n", x, y);
}
int main() {
myfun fp;
fp = test_a;
fp(1, 2, 3);
fp = (myfun) test_b;
fp(4, 5, 6);
}
또한 피 호출자 정리를 사용하면 충돌이 발생할 수 있습니다. 나는 –
을 본다. 'typedef void (* myfun)() '와 같이 매개 변수 목록없이 함수 포인터 유형을 정의하는 것은 어떻습니까? 컴파일러는이 경우 스택의 매개 변수 순서가 "옳다"라고 보장해야합니까? – Askaga
@BillAskaga No : 원하는 것을 "보장"하려면 대상 함수와 함수 포인터가 모두 [cdecl calling convention]을 사용해야합니다 (http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl). – ChrisW