(6)-头文件的正确定义

最后更新于:2022-04-01 16:11:05

**代码:** 头文件print_tools.h **** ~~~ #include<stdio.h> void printStr(const char *pStr) { printf("%s\n",pStr); } void printtInt(const int i) { printf("%d\n",i); } ~~~ 头文件counter.h **** ~~~ #include"print_tools.h" static int sg_value; void counter_init() { sg_value=0; } void counter_count() { sg_value++; } void counter_out_result() { printStr("the result is:"); printtInt(sg_value); } ~~~ main.cpp ~~~ #include "print_tools.h" #include "counter.h" int main() {   char ch;   counter_init();   printStr("please input some charactors:");   while((ch=getchar())!='$')     {       if(ch=='A') counter_count();     }   counter_out_result(); } ~~~ **疑:**以上代码编译时有何问题吗,是什么导致的呢? 解答:void printStr(const char*)和'void printtInt(int) 函数redefine了,道理很简单,因为在counter.h中已包含了print_tools.h,在main.cpp中又包含了print_tools.h头文件,也就是两次包含了print_toosl.h,所以也就发生了重定义错误,这是初学者常见问题,要避免这个问题,我们必须采取防范措施,就是使用预编译命令,如下作修改: **** 头文件print_tools.h **** ~~~ #ifndef PRINT_TOOLS_H //如果未定义 PRINT_TOOLS_H #define PRINT_TOOLS_H //则定义 然后编译以下源代码 #include<stdio.h> void printStr(const char *pStr) {   printf("%s\n",pStr); } void printtInt(const int i) {   printf("%d\n",i); } #endif //结束 //如此改头文件就只被编译器编译一次了,起到了防范重定义错误的作用 ~~~ **头文件counter.h** **** ~~~ #ifndef COUNTER_H // #define COUNTER_H // #include"print_tools.h" static int sg_value; void counter_init() {   sg_value=0; } void counter_count() {   sg_value++; } void counter_out_result() {   printStr("the result is:");   printtInt(sg_value); } #endif // ~~~ 在一个工程项目中头文件众多繁杂,采用这个方法可以很好的避免,所以每当我们定义一个头文件时要养成如此的良好习惯。 ======= welcome to my HomePage([*http://blog.csdn.net/zhanxinhang*](http://blog.csdn.net/zhanxinhang)) to have a communication =======
';