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);** 컴파일 오류

}

여기서는 첫 번째 함수 호출시 오류가 나고 두 번째 함수내 함수 호출시 오류가 납니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)