2012-06-21 140 views
0

我还在学习C和我明白,要摆脱最隐式声明的警告,你在开始添加原型头。但是我对你在代码中使用外部方法时所做的事感到困惑。函数的隐式声明?

这是当我使用的方法外

#include <stdio.h> 
    #include <string.h> 
    int main(void) 
    { 
     int arrayCapacity = 10; 
     int maxCmdLength = 20; 

     int A[arrayCapacity]; 
     int count = 0; /* how many ints stored in array A */ 
     char command[maxCmdLength + 1]; 
     int n; 

     while (scanf("%s", command) != EOF) 
     { 

     if (strcmp(command, "insert") == 0) 
     { 
      scanf("%d", &n);     
      insert (n, A, arrayCapacity, &count); 
      printArray(A, arrayCapacity, count); 
     } 
     else if (strcmp(command, "delete") == 0) 
     { 

      scanf("%d", &n); 
      delete(n,A,&count); 
      printArray(A, arrayCapacity, count); 

     }  
     else 
     { 
      scanf("%d", &n); 
      printArray(A, arrayCapacity, count); 
     } 
    } 
    return 0; 
    } 

方法printArray,插入我的代码,并删除全部的形式:printArray.o, insert.o, delete.o

这是我编译了一个程序:gcc -Wall insert.o delete.o printArray.o q1.c 和我得到这些警告:

q1.c: In function âmainâ: 
q1.c:20: warning: implicit declaration of function `insert' 
q1.c:21: warning: implicit declaration of function `printArray' 
q1.c:30: warning: implicit declaration of function `delete' 

我试过,包括这头,但我得到è没有找到文件或目录的错误。

任何帮助表示赞赏。

+0

什么是对的#include是你使用,你在哪里放头? – Mark

回答

0

您需要包括正确的头摆脱这样的警告。

如果你得到一个“未找到文件”的错误,尽量把它们作为

#include "myheader.h" 

,并把你的头文件在同一目录下的源代码。

一般来说,#include "file"为程序员定义的报头,而#include <file>是或标准头。

2

把它们放在一个头文件foo.h像这样:

extern void printArray(int *A, int capacity, int count); 
... 

然后包括该文件在源

#include "foo.h" 
0

你应该能够只是把函数原型在顶部该文件就像你在同一个文件中为其他功能做的那样。链接器应该照顾其余的。

0

你从哪里得到那些.o文件?如果你自己写的这些,那么你应该建立相应的.h文件。如果你从别的地方得到这些文件,那么你应该寻找在同一个地方的标头。

0

如果所有的调用函数是在的main()函数编译器会知道他们的名字,返回类型和参数签名并全部三种性质,每个下面的函数调用比赛之前写的。

一些程序员喜欢先写一个函数签名,并做在以后的执行时间。

函数声明唯一必要的时候是使用协程序:functionA调用函数B,然后调用functionA。

完成如下:

type a(...signatureOfA...) 

/* compiler now knows about a() */ 

type b(...signatureOfB...) 
{… 
// implementation of b 
a(…arguments for a…); 

/* compiler knows about above */ 
…} 

type a(...signatureOfA...)i 
{… 
// implementation of a 
b(…arguments for b…); 

/* compiler knows about above */ 
…} 

int main() 
{ 
a(… arguments for a…); 
/* compiler knows */ 
return(code); 
}