全局变量之使用问题

之前帮同学做点小程序还没发现问题,这次做了个大的才发现,全局变量的使用貌似存在很多问题,尤其是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

 

听起来貌似不错,下次试试看!

原文地址:https://www.cnblogs.com/color-my-life/p/3218036.html