这是一个头文件
#include <stdio.h>
int m = 18;
int x = 4;
int singles (n) {
if (n == 1)
return 0;
return doubles(n-1);
}
int doubles (n) {
if (n == 1)
return 0;
return triples(n-1);
}
int triples (n) {
if (n == 1)
return m;
return (singles(n-1) + doubles (n-1) + triples (n-1))*(m-1);
}
这是主要文件
#include <stdio.h>
#include "test.h"
int main () {
printf("%d",singles (x));
}
所以这至少对我来说很复杂。我的想法是在主函数中我将调用singles(x),其中x = 4,所以它更像singles(4),它将调用doubles(3),这将调用三元组(2),将调用所有将返回0的单打(1),双元组(1)返回0,三元组(1)将返回m。
所以我得到的错误是
./test.h:13:12: warning: implicit declaration of function 'doubles' is invalid
in C99 [-Wimplicit-function-declaration]
return doubles(n-1);
^
./test.h:20:12: warning: implicit declaration of function 'triples' is invalid
in C99 [-Wimplicit-function-declaration]
return triples(n-1);
^
2 warnings generated.
我尝试使用第一个脚本创建头文件.h,然后制作第二个.c脚本以进行编译,但该脚本无法正常工作。我尝试导入头文件来避免此错误,但似乎没有工作。
非常感谢
最佳答案
在singles
内部,您正在使用doubles
进行定义。类似地,在doubles
中,您在定义triples
之前就使用它。这就是为什么您会收到隐式声明错误的原因。
另外,您没有为这些函数中的任何一个定义n
参数的类型。
您需要指定函数原型(prototype),这些原型(prototype)在不定义函数的情况下声明了函数:
int singles(int n);
int doubles(int n);
int triples(int n);
另外,您不应该在头文件中定义函数。如果将此头文件包含在多个.c文件中,然后将它们链接在一起,则会出现错误,因为您将对这些函数有多个定义。
提取所有函数定义,并将其放入test.c。然后在test.h中,仅将原型(prototype)放在上面。然后,您可以按如下所示编译所有内容:
gcc -c test.c
gcc -c main.c
gcc -o main main.o test.o
或一行:
gcc -o main test.c main.c
关于c - 警告: implicit declaration of function is invalid in C99?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33110645/