2014-11-21 6 views
1

멍청한 질문 : menu() 및 menu()를 호출 할 수있는 다른 함수가있는 funcoes.h라는 라이브러리를 만들었습니다. 예 :함수를 호출하여 서로 호출 - C

void cifrar(){ 

printf("\n\nDeseja cifrar outra mensagem? Digite 1 para Sim ou 2 para sair: "); 
scanf("%d", &exit); 

if(exit == 1){ 
     cifrar(); 
     } 
else{ 
     menu(); 
     } 

}

void menu(){ 
    printf("Escolha uma das opcoes: ");   
    scanf("%d", &varMenu); 
    switch(varMenu){ 
        case 1: 
          system("cls"); 
          cifrar(); 
          break; 
        case 2: 
          system("cls"); 
          decifrar(); 
          break; 
        case 3: 
          system("cls"); 
          sair(); 
          break; 
        default: 
          system("cls"); 
          printf("Escolha uma opcao valida!\n\n"); 
          menu(); 
          break; 
    }   
} 

하지만 컴파일 할 때, 나는이 오류가 :

In function 'void cifrar()' 
'menu' undeclared(first use this function)" 

'void menu()' used prior to declaration 

어떻게 그들이 오류없이 서로를 호출 할 수 있습니까?

감사합니다.

+0

'funcoes.h '라고하는 라이브러리는 정말 그렇습니까? 내가 관심. –

+2

'.h' 파일의 시작 부분에 모든 함수의 프로토 타입을 선언합니까? – oopcode

+1

먼저 함수 프로토 타입을 선언해야합니다. – nem035

답변

2

호출 전에 모든 함수를 호출하기 전에 선언해야합니다. 당신은 그 함수의 프로토 타입을 사용하여이 작업을 수행 할 수 있습니다

void menu(); 

void cifrar() { 
    ... 
} 

void menu() { 

    .. 
} 

하거나 cifrar의 상단에 (그것의 몸) 전체 주요 기능을 넣어

.

2

글쎄, 어쩌면 코멘트에 무엇을 요약하는 것이 좋을지도 모릅니다.

컴파일러는이 함수가 다른 곳에서 사용되기 전에 함수의 프로토 타입을 알고 싶어합니다. 'Before'는 '소스 파일의 앞부분'과 같은 의미입니다. 모든 프로토 타입을 별도의 .h 파일에 배치하고 실제 코드가 포함 된 .c 파일에 포함시킨 다음 원하는 순서대로 함수 구현을 배치 할 수 있습니다. 컴파일러는 불평하지 않습니다.

2

당신이해야 할 일은 모든 기능의 서명이있는 헤더 파일을 작성한 다음 코드에서 각 기능의 위치를 ​​염려 할 필요가 없으며 모든 기능을 사용할 수 있습니다 코드 전체에서 함수의

코드는 다음과 같아야합니다 funcoes.c

#include "funcoes.h" 

void cifrar(void){ 

printf("\n\nDeseja cifrar outra mensagem? Digite 1 para Sim ou 2 para sair: "); 
scanf("%d", &exit); 

if(exit == 1){ 
     cifrar(); 
     } 
else{ 
     menu(); 
     } 
} 

void menu(void){ 
    printf("Escolha uma das opcoes: ");   
    scanf("%d", &varMenu); 
    switch(varMenu){ 
        case 1: 
          system("cls"); 
          cifrar(); 
          break; 
        case 2: 
          system("cls"); 
          decifrar(); 
          break; 
        case 3: 
          system("cls"); 
          sair(); 
          break; 
        default: 
          system("cls"); 
          printf("Escolha uma opcao valida!\n\n"); 
          menu(); 
          break; 
    }   
} 

또 다른 작은 팁, 인수없이 함수를 생성하지 않는

void cifrar(void); 
void menu(void); 

funcoes.h 예 :

void menu(); 

항상 전달할 인수를 삽입하십시오. 함수가 인수가 아닌 것을 얻으려면 void 만 전달하면됩니다.

void menu (void); 
+0

도움 주셔서 감사합니다. –

관련 문제