首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数声明不是原型?

函数声明不是原型?
EN

Stack Overflow用户
提问于 2018-03-23 06:57:47
回答 2查看 0关注 0票数 0

我有一个我创建的库,

mylib.c:

代码语言:javascript
复制
#include <mylib.h>
int
testlib() {
    printf("Hello world\n");
    return (0);
}

mylib.h:

代码语言:javascript
复制
#include <stdio.h>
extern int testlib();

在我的程序中,我试图调用这个库函数:

myprogram.c:

代码语言:javascript
复制
#include <mylib.h>

int
main (int argc, char *argv[]) {
    testlib();
    return (0);
}

当我尝试编译该程序时,出现以下错误:

代码语言:javascript
复制
在myprogram.c包含的文件中:1
mylib.h:2警告:函数声明不是原型

我在用着: gcc (GCC) 3.4.5 20051201 (Red Hat 3.4.5-2)

我的问题是,声明函数原型的正确方法是什么?

EN

Stack Overflow用户

发布于 2018-03-23 15:26:51

在C int foo()int foo(void)是不同的函数。int foo()接受任意数量的参数,同时int foo(void)接受0个参数。在C ++中,它们意味着同样的事情。void当你的意思是没有参数时,我建议你一贯使用。

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

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

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档