一个菜鸟问题:我创建了一个名为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
如何在没有此错误的情况下让他们互相打电话?
谢谢!
答案 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);