全局变量之使用问题
之前帮同学做点小程序还没发现问题,这次做了个大的才发现,全局变量的使用貌似存在很多问题,尤其是include的冲突产生的重定义问题,这里的解决办法如下:
1.不使用全局变量,将全局变量转换为类中,可以设置权限为public,这样可以从根本上解决这一问题.
2.使用ifndef define来控制编译流程,从而消除重定义问题,(但是这个对全局变量貌似失效了?).
#include <iostream> using namespace std; #ifndef _HAHAHA_ #define _HAHAHA_ #define ADMIN "admin" #define ADMIN_PW "admin" #define USER "test" #define USER_PW "test" //问题的结构体 struct Question { string question; string answer[4]; int right_answer; }; #endif
以后再写的时候必须去总结下关于头文件的问题,不然这个太影响编程效率了.总结出相应的规范,在网上看到一个说法:
在一段时间的编程中,时常会遇到重定义(redefinition)问题。一般都是#include在包含头.h文件时出现了重复包含的关系。运气好的话可以比较容易的发现问题,运气不好的话只好列出所有的头文件.h中的包含关系,挨个检查是哪里出了问题。最近发现如果遵循“在头文件.h中不再包含头文件.h”的原则,可以从根本上避免这个问题。虽然这样做会使得在代码文件.c或.cpp中必须各自包含进来所需的头文件.h,还要注意在包含时可能会存在顺序的问题,但这比起查找何处进行了重定义来说简单了许多,也使包含关系更加清晰。
对原来的项目中的所有文件按上述原则进行了修改,暂未发现不良影响,感觉还不错。转自http://blog.pfan.cn/programming/21658.html
听起来貌似不错,下次试试看!