함수포인터 호출시 인자 개수가 안맞는 경우 문제가 되나요?
글쓴이: trymp / 작성시간: 목, 2021/11/11 - 1:16오후
#include <stdio.h> #include <stdlib.h> int testfunc(int a, int b) { return (a+b); } void dummyfunc(void) { printf("dummy"); } int main(int ac, char *av[]) { typeof(testfunc) *funcptr; funcptr = (typeof(funcptr))dummyfunc; funcptr(3,5); return 0; }
위와 같이 함수포인터에 인자가 적은 함수를 넣어서 호출해도 문제가 없을까요?
메모리를 깨거나 하는 문제는 없을까요?
노파심에 질문드립니다. 도움 주시면 감사하겠습니다 .
Forums:
1. 왜 그런 짓을 하려고 하세요?
1. 왜 그런 짓을 하려고 하세요?
얌전하게 C언어를 쓰는 건 재미가 없으니 도전하는 걸 즐기는 타입이십니까?
저라면 꼭 그렇게 해야 할 이유가 없다면 그렇게까지 타입 시스템에 엿을 먹이고 싶은 생각은 안 들 겁니다.
다른 방법이 있을거에요.
2. 문제가 생길 소지가 있습니다.
특히 매개변수를 반드시 스택에 올린 뒤 호출된 함수가 반환될 때 스택을 cleanup하는, 예컨대 x86의 stdcall 같은 호출 규약에서 말이죠.
caller는 매개변수를 스택에 밀어넣었는데 callee는 cleanup을 안 할 테니 스택이 밀려 버리겠지요?
근데 뭐 요즘은 매개변수가 몇 개 없으면 레지스터에 실어서 보내는 게 대세이기도 하니, 올려주신 코드 정도는 십중팔구 문제는 없을 겁니다.
그래도 별로 추천드리고 싶진 않습니다. 쓰고 싶으면 본인 책임 하에 쓰세요...
댓글 달기