内置函数'printf'的不兼容隐式声明

时间:2013-12-10 21:52:32

标签: c crash declaration implicit

我有一个大问题。 这是我创建的头文件,有一个小终端菜单。 问题是,在功能"菜单" (意大利名字),当我编译它时,我得到一个警告说 " [警告]内置函数的不兼容隐式声明' 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

btw:&#34; nuovaOpzione&#34;中的strcpy函数也是一个警告,但是你好......

4 个答案:

答案 0 :(得分:2)

你忘记了包含:

#include <stdio.h>

答案 1 :(得分:1)

Jens对printf警告是正确的。

对于崩溃,根据您的程序,您需要opz的数组,而不是指针。

struct Opzione opz[1000];

答案 2 :(得分:0)

  

内置函数'printf

的不兼容隐式声明

问题在于,当编译器第一次遇到对printf()的调用时,它就会自己(即隐式地)定义如下定义:

  

printf(char [],char)

但稍后你用

打电话
  

的printf(炭[])

所以抱怨。

正如其他海报所说,你应该加入适当的定义,原则上不要把代码放在头文件中。

答案 3 :(得分:0)

尝试将menu()的正文放入.c源文件中(如@ouah指出)并在#include <stdio.h>文件中添加.h(如@Jens指示),因为编译器必须知道它的签名。

.h文件中包含代码是C中的 NOT 良好做法。某些编译器可能会在处理其中一个时打开/关闭细节。