包含库头文件需要注意的事项

作者在 2007-09-02 05:14:00 发布以下内容

今天,就给大家说一说使用头文件得注意的地方.
费话少说,就给大家一个例子吧:
#include<stdio.h>
#define BUFSIZ 128
int main(void)
{
return 0;
}
编译一下,给现了一个警告:
 Compiling D:\TURBOC2\NONAME.C:
 Warning D:\TURBOC2\NONAME.C 2: Redefinition of 'BUFSIZ' is not identical
哦,原来是在stdio.h头文件中也宏定义了BUFSIZ.
因此,我们在使用宏时,不能和头文件中定义的宏相同.这点值得大家注意.

还有头文件中的函数也得注意,我们选用的函数名也不能和头文件中的函数名相同.
看一看下面的例子:
#include<stdio.h>
char unlink(void);
int main(void)
{
return 0;
}
char unlink(void)
{
}
编译一下,出现了二个错误:
Error D:\TURBOC2\NONAME.C 2: Type mismatch in redeclaration of 'unlink'
Error D:\TURBOC2\NONAME.C 8: Type mismatch in redeclaration of 'unlink'
由于stdio.h中有int      _Cdecl unlink   (const char *path);的声明,
而你又使用unlink作为函数名,出现了重名.编译器会把代码中的出现unlink函数
看作是unlink()的定义,因此,就出现的重定义函数时的参数类型不对.

但我把上出的代码改一下:
#include<stdio.h>
int unlink(const char* path)
{
printf("%s",path);
}
int main(void)
{
unlink("OK?");
return 0;
}
编译一下,没有出现错误,再链接一下,也没有出现错误.
结果:
OK?
也就是说,链接器并没有链接库函数unlink().
说明链接器不是把所的头文件中的库函数都链接,而是把代码中使用到的库函数链接.
而代码使用的unlink()在代码中已经定义了,所以链接器并不链接unlink()库函数.
所以这样做问题是没有,但也得注意一下,这样做是不是妥当.

我的C语言编程经验 | 阅读 2024 次
文章评论,共0条
游客请输入验证码