小编典典

警告/错误“函数声明不是原型”

all

我有一个我创建的图书馆,

文件 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)

声明函数原型的正确方法是什么?


阅读 185

收藏
2022-08-03

共1个答案

小编典典

在 Cint foo()int foo(void)是不同的功能。int foo()接受任意数量的参数,同时int foo(void)接受
0 个参数。在 C++ 中,它们的含义相同。我建议您void在没有争论的情况下始终如一地使用。

如果你有一个 variable aextern int a;是一种告诉编译器这a是一个可能出现在不同翻译单元中的符号的方法(C
编译器代表源文件),在链接时间之前不要解析它。另一方面,作为函数名称的符号无论如何都会在链接时解析。extern函数( ,
)上的存储类说明符的含义static仅影响其可见性并且extern是默认值,因此extern实际上是不必要的。

我建议删除extern,它是无关的,通常被省略。

2022-08-03