Chinaunix首页 | 论坛 | 博客
  • 博客访问: 482595
  • 博文数量: 120
  • 博客积分: 1853
  • 博客等级: 上尉
  • 技术积分: 1177
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-22 22:40
文章分类

全部博文(120)

文章存档

2013年(16)

2012年(104)

分类: C/C++

2012-11-22 01:09:01

1. 在.h中如何定义一个全局变量? 如何引用?
2. 在.cpp中如何定义一个全局变量?如何引用?

1.头文件中应使用extern 关键字声明全局变量(不定义),如果这个变量有多个文件用到,可以新建一个cpp,在其中定义,把这个cpp加入工程即可,我做大工程通常会有一个overall.h,overall.cpp来处理这些。引用就简单了,直接用。

楼主多看看一下纯C算法库的实现,1所说的方式很普遍,有些事统一定义于一个overall.cpp,有些甚至单独开一个cpp定义。

2.这个就和单文件一样啊,很简单。

我写过一个加密邮件程序,公用的变量声明于overall.h

C/C++ code

extern symmetric_key skey;
extern hash_state ripe128;
extern hash_state ripe160;
extern hash_state ripe256;
extern hash_state ripe320;
extern hash_state md2;
extern hash_state md4;
extern hash_state md5;
extern hash_state sha1;
extern hash_state sha224;
extern hash_state sha256;
extern hash_state sha384;
extern hash_state sha512;
extern hash_state tiger;
extern hash_state whirlpool;
extern prng_state rc4;
extern prng_state sober128;
extern rsa_key rkey;
extern dsa_key dkey;
extern ecc_key ekey;
extern classic_key ckey;

extern bool stp;
extern UINT ps;
extern UINT probar;
extern TCHAR appconfigpath[MAX_PATH];
extern TCHAR privatekey[MAX_PATH];
extern TCHAR publickey[MAX_PATH];
extern TCHAR normaluser[MAX_PATH];
extern TCHAR server[MAX_PATH];
extern TCHAR configini[MAX_PATH];
extern TCHAR document[MAX_PATH];
extern UCHAR plaintext[4096];
extern UCHAR ciphertext[4096];
extern char smtphost[MAX_PATH];
extern char pop3host[MAX_PATH];
extern char username[MAX_PATH];
extern char password[MAX_PATH];
extern LARGE_INTEGER begintime,endtime,freqtime,resulttime;



定义于,overall.cpp

C/C++ code

symmetric_key skey;
hash_state ripe128;
hash_state ripe160;
hash_state ripe256;
hash_state ripe320;
hash_state md2;
hash_state md4;
hash_state md5;
hash_state sha1;
hash_state sha224;
hash_state sha256;
hash_state sha384;
hash_state sha512;
hash_state tiger;
hash_state whirlpool;
Adler32 adler32;
CRC32 crc32;
prng_state rc4,sober128;
rsa_key rkey;
dsa_key dkey;
ecc_key ekey;
classic_key ckey;


bool stp = false;
UINT ps = 0;
UINT probar = 0;
TCHAR appconfigpath[MAX_PATH] = {0};
TCHAR privatekey[MAX_PATH] = {0};
TCHAR publickey[MAX_PATH] = {0};
TCHAR normaluser[MAX_PATH] = {0};
TCHAR server[MAX_PATH] = {0};
TCHAR configini[MAX_PATH] = {0};
TCHAR document[MAX_PATH] = {0};
UCHAR plaintext[4096] = {0};
UCHAR ciphertext[4096] = {0};
char smtphost[MAX_PATH] = {0};
char pop3host[MAX_PATH] = {0};
char username[MAX_PATH] = {0};
char password[MAX_PATH] = {0};
LARGE_INTEGER begintime,endtime,freqtime,resulttime;
头文件请不要定义任何变量,那是非常业余的行为……

一般在头文件中申明,用extern, 在cpp中定义。 如果在头文件中定义,如果这个头文件被多个cpp引用,会造成重复定义的链接错误。

头文件只能申明全局变量(extern),不可定义(不推荐使用)
.cpp里,在最外层定义即可(int gi),直接引用

如果在.cpp里使用static定义,则该变量只在当前cpp文件中有效,在别的文件中无效
在.h里使用static定义,不会进行编译(.h文件不编译),只会在其每个include的cpp文件中包含编译,相当于在.cpp里使用static 定义。

1、头文件可被其他文件包含,若在头文件定义全局变量的话,只能被不大于一个文件包含,否则无法连接。变量被重复定义。
2、在头文件使用extern修饰的变量只是声明,该变量必须在别处定义


-----------------

阅读(2521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~