让函数相互调用 - C

时间:2014-11-21 14:16:56

标签: c function dev-c++

一个菜鸟问题:我创建了一个名为funcoes.h的库,它有一个menu()和其他可以调用menu()的函数。一个例子:

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

如何在没有此错误的情况下让他们互相打电话?

谢谢!

3 个答案:

答案 0 :(得分:2)

您调用的每个函数都必须在调用之前声明。你可以通过使用该函数的原型来完成这个:

void menu();

void cifrar() {
  ...
}

void menu() {

  ..
}

或者简单地将整个主要功能(带有它的身体)放在cifrar之上。

答案 1 :(得分:2)

好吧,也许总结评论中的内容会很好。

编译器想要在其他地方使用此函数之前知道任何函数的原型。 '之前'这里的意思是“源文件”之前的类似内容'。但是,您可以将所有原型放在单独的.h文件中,将其包含在带有实际代码的.c文件中,然后按照您喜欢的顺序放置函数实现 - 编译器不会抱怨。

答案 2 :(得分:2)

你应该做的是创建一个头文件,它将具有你所有功能的签名,然后你不必担心每个函数在代码中的位置,你将能够使用所有的整个代码的功能。

您的代码应如下所示:

<强> funcoes.h

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

<强> 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 menu();

始终插入要传递的参数。如果您希望函数不是参数,只需传递void。

void menu (void);