【发布时间】:2013-12-28 15:44:37
【问题描述】:
我有一个大问题。 这是我创建的具有小终端菜单的头文件。 问题是,在函数 "menu" (italian name) 中,当我编译它时,我收到一条警告,上面写着 “[警告]内置函数'printf'的不兼容隐式声明[默认启用]” 然后,如果我运行它,它就会崩溃。
#ifndef HEADER
#define HEADER
int numeroOpz = 0;
int selezON = 0;
int tasto;
struct Opzione{
char *testo;
int selez;
};
struct Opzione *opz;
void nuovaOpzione(char *testoOpz){
strcpy(opz[numeroOpz].testo, testoOpz); //Il testo dell'opzione viene copiato
opz[numeroOpz].selez = 0; //Nessuna opzione viene inizialmente selezionata
numeroOpz++;
}
void menu(){
opz[0].selez = 1;
while(tasto != 13){
int i;
for(i=0;i < numeroOpz;i++){
if(opz[i].selez == 1){
printf("||%s||\n", opz[i].testo);
}
else if(opz[i].selez == 0){
printf("%s\n", opz[i].testo);
}
tasto = getch();
switch (tasto){
case 72: //SU
if(selezON > 0){
opz[selezON].selez = 0;
opz[selezON-1].selez = 1;
selezON--;
}
else{
opz[selezON].selez = 0;
opz[numeroOpz-1].selez = 1;
}
break;
case 80: //GIU
if(selezON < numeroOpz){
opz[selezON].selez = 0;
opz[selezON+1].selez = 1;
selezON++;
}
else{
opz[selezON].selez = 0;
opz[0].selez = 1;
}
break;
default:
printf("Error\n\n\n\n");
break;
}
}
}
}
#endif
这里是源文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Opzioni.h"
int main(){
nuovaOpzione("Ciao");
nuovaOpzione("Bellaaa");
nuovaOpzione("Hey");
menu();
getch();
return 0;
}
我快疯了,是的,我搜索了很多其他问题的帮助...... 感谢您的帮助! :P
顺便说一句:“nuovaOpzione”中的 strcpy 函数也是一个警告,但是 yolo...
【问题讨论】:
-
不要将函数体放在头文件中。
-
你的头文件中有函数定义吗?如果是,则应将其移至源文件。
-
你的编译器/链接器命令是什么样的?
-
虽然
#include <stdio.h>不在"Opzioni.h"中,但#include <stdio.h>在做#include "Opzioni.h"之前已经包含在main.c中,所以这个警告是意料之外的。我认为发布的内容与 OP 的编译不同,或者另一个 .c 文件包含“Opzioni.h”而没有前面的#include <stdio.h>。 -
还怀疑用“内置”字样来描述
printf()的警告。
标签: c crash declaration implicit