心不留意外尘 / ccpp for hard... / 关于全局变量在头文件中的定义

0 0

   

关于全局变量在头文件中的定义

2016-05-03  心不留意...

http://blog.chinaunix.net/uid-26377420-id-3416916.html

2011

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修饰的变量只是声明,该变量必须在别处定义


-----------------http://hi.baidu.com/lovestartian/item/743418f6298bac4f922af2a3

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章
    喜欢该文的人也喜欢 更多