包含库头文件注意事项
今天考试日,我给大家讲一讲使用头文件需要注意的地方。
我举个例子:
# include
# define buffsiz 128
int main(void)
{
return 0;
}
编译它,给出警告:
编译D: \ Turbo C2 \ noname.c:
警告D: \ Turbo C2 \ Noname.c2:重新定义' buffsiz '不是标识
exampa提示:原来buffsiz也是在stdio.h头文件中定义的。
因此,当我们使用宏时,它不能与头文件中定义的宏相同。这个值得大家注意。
还要注意头文件中的函数,我们选择的函数名称不能和头文件中的相同。
看看下面的例子:
# include
char unlink(void);
int main(void)
{
return 0;
}
char unlink(void)
{
}
编译时出现两个错误:
错误D:\TURBOC2\ Noname.c2:重定义' unlink '时类型不匹配
错误D: \ Turbo C2 \ noname.c8:重定义' unlink'
时类型不匹配因为stdio.h中有int _ Cdecl unlink(const char * path);声明,
并使用unlink作为函数名,则出现重复的名称。编译器会将代码中出现unlink函数
视为unlink()的定义,因此,重新定义函数的参数类型是错误的。
但是我改了代码:
# include
int unlink(const char * path)
{
printf(" % s ",path);
}
int main(void)
{
unlink(" OK?");
返回0;
}
编译一下,没有错误,再链接一下,也没有错误。
结果:
OK?
也就是说链接器没有链接库函数unlink()。
说明链接器并不链接头文件中的所有库函数,而是链接代码中使用的库函数。
代码使用的unlink()已经在代码中定义了,所以链接器不链接unlink()库函数。[/br/
0条评论