我有一个我创建的库,
mylib.c:
#include <mylib.h>
int
testlib() {
printf("Hello world\n");
return (0);
}
mylib.h:
#include <stdio.h>
extern int testlib();
在我的程序中,我试图调用这个库函数:
myprogram.c:
#include <mylib.h>
int
main (int argc, char *argv[]) {
testlib();
return (0);
}
当我尝试编译该程序时,出现以下错误:
在myprogram.c包含的文件中:1
mylib.h:2警告:函数声明不是原型
我在用着: gcc (GCC) 3.4.5 20051201 (Red Hat 3.4.5-2)
我的问题是,声明函数原型的正确方法是什么?
发布于 2018-03-23 15:26:51
在C int foo()
和int foo(void)
是不同的函数。int foo()
接受任意数量的参数,同时int foo(void)
接受0个参数。在C ++中,它们意味着同样的事情。void
当你的意思是没有参数时,我建议你一贯使用。
如果你有一个变量a
,extern int a;
是告诉编译器这a
是一个可能出现在另一个翻译单元中的符号的方法(C编译器说的是源文件),直到链接时间才解决它。另一方面,作为函数名的符号无论如何都是在链接时解决的。存储类说明符在函数(extern
,static
)上的含义仅影响其可见性并且extern
是默认值,因此extern
实际上是不必要的。
我建议删除它extern
,它是无关的,通常被省略。
https://stackoverflow.com/questions/-100007761
复制相似问题