看了一个简单的程序感觉基础知识不扎实啊。废话少说,请看一下程序。建立了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代码时更是这样。
阅读(706) | 评论(0) | 转发(0) |