Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55088
  • 博文数量: 19
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 177
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-25 21:11
文章分类

全部博文(19)

文章存档

2011年(1)

2009年(18)

我的朋友

分类: C/C++

2009-05-07 17:32:26

看了一个简单的程序感觉基础知识不扎实啊。废话少说,请看一下程序。建立了3个文件。
mylib.c:
#include
int testlib() {
    printf("Hello world\n");
    return 0;
}

mylib.h:
#include
extern int testlib();

myprogram.c:
#include
int main (int argc, char *argv[]) {
    testlib();
    return (0);
}
在编译的时候会出现warning:function declaration isn't a prototype。
这是因为在C中foo()和foo(void)是不同的函数,foo()接收不限数目的参数,而foo(void)接收0个参数。在C++中这两个是一样的。

另外对extern的引用也不正确。如果有一个变量a,"extern int a;"告诉编译器'a'是一个在其他编译单元中定义的符号,直到链接的时候才对它进行解析。另一个方面,对于函数名这样的符号总是在链接的时候进行解析的。也就是说函数存储类型(extern,static)只影响函数的作用范围。因为extern是默认的属性,所以它在这里不是必须的,应该省略。尤其是在写纯C代码时更是这样。
阅读(682) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~