c언어 타입재정의 질문드립니다
조회수 658회
include
typedef void FuncPtr(int n);
typedef void (*FuncPtr2)(int n);
void Print(int n) {
if(n!=0)
puts("타입재정의");
else
puts("함수포인터 변수");
}
void Funtion(int n, FuncPtr func, FuncPtr * func2)
{
func(n);
func2(n);
} void Funtion2(int n, FuncPtr2 func, FuncPtr2 * func2)
{
func(n);
func2(n);
}
int main(void) {
void (*fptr)(int);
FuncPtr * action;//FuncPtr action;
FuncPtr2 action2;//FuncPtr2 * action2;
fptr=Print;
action=Print;
action2=Print;
fptr(0);
action(1);
action2(1);
Funtion(1,action,action);
Funtion2(1,action2,action2);
return 0;
}
안녕하세요. 공부하다가 답답해서 질문드립니다. 질문의 요지는 메인함수에서 선언할때 형태와 함수의 매개변수로 사용할때 형태가 일관성?이 없는거 같습니다. 그래서 헷갈리구요.
Q1 책에 적힌 소스코드마다
typedef void FuncPtr(int n); 과
typedef void (*FuncPtr)(int n); 2가지 형태로 적혀있는데
같은 문장인가요?(제가 테스트해보니미묘하게 좀 달라서 질문드립니다.)
Q2
typedef void FuncPtr(int n);
FuncPtr * action; 메인함수에서 이렇게 선언을 하고 //FuncPtr action;
void Funtion(int n, FuncPtr func, FuncPtr * func2) 함수의 매개변수로 2가지 형태로 선언이 가능합니다.
그런데 메인함수에서 //FuncPtr action; 이선언은 컴파일이 안됩니다.
Q3
타입재정의를 다르게 한경우입니다.
typedef void (*FuncPtr2)(int n);
FuncPtr2 action2; //FuncPtr2 * action2;
action2=Print;
Funtion2(1,action2,action2); 컴파일 오류
void Funtion2(int n, FuncPtr2 func, FuncPtr2 * func2) {
func(n);
**func2(n);** 컴파일 오류
}
여기서는 첫 번째 함수 호출시 오류가 나고 두 번째 함수내 함수 호출시 오류가 납니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력