头文件中定义const 全局变量应注意的问题
来源:百度文库 编辑:神马文学网 时间:2024/04/28 15:04:05
我们知道,在 C++(但不是在 C 语言)中,const 限定符对默认存储类型稍有影响。在默认情况下,全局变量的链接性为外部的,但 const 全局变量的链接性为内部的。也就是说,在 C++ 看来,全局 const 定义就像使用了 static 说明符一样。
因此,可以将 const 常量定义在头文件中供工程中的多个其它文件包含引用,并且编译时不会产生变量重复定义的错误。当然,也可以用 #define 宏定义。
一般常量定义并无问题,但是,如果 const 要限定的是指针就须特别注意。这里以字符数组为例来说明。
01.// const_header.h
02.#ifndef CONST_HEADER_H_
03.#define CONST_HEADER_H_
04.
05.const char* CONST_STRING = "wangqi"; // 错误!指针 CONST_STRING 并非 const 常量,所以该头文件
06. // 被多个文件包含时,会有变量重复定义的编译错误。
07.
08.const char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是指向常量的常量指针。
09.const char CONST_STRING[] = "wangqi"; // 正确,CONST_STRING 是 const char [7] 类型。
10.char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是常量指针。
11.#define CONST_STRING "wangqi"; // 正确,传统用法。
12.
13.static char CONST_STRING[] = "wangqi"; // 正确
14.static char* CONST_STRING = "wangqi";
15.static const char* CONST_STRING = "wangqi"; // 正确
16.
17.namespace // 正确
18.{
19. char CONST_STRING[] = "wangqi";
20.}
21.
22.namespace // 正确
23.{
24. char* CONST_STRING = "wangqi";
25.}
26.
27.namespace // 正确
28.{
29. const char* CONST_STRING = "wangqi";
30.}
31.
32.#endif // CONST_HEADER_H_
// const_header.h
#ifndef CONST_HEADER_H_
#define CONST_HEADER_H_ const char* CONST_STRING = "wangqi"; // 错误!指针 CONST_STRING 并非 const 常量,所以该头文件
// 被多个文件包含时,会有变量重复定义的编译错误。const char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是指向常量的常量指针。
const char CONST_STRING[] = "wangqi"; // 正确,CONST_STRING 是 const char [7] 类型。
char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是常量指针。
#define CONST_STRING "wangqi"; // 正确,传统用法。static char CONST_STRING[] = "wangqi"; // 正确
static char* CONST_STRING = "wangqi";
static const char* CONST_STRING = "wangqi"; // 正确namespace // 正确
{
char CONST_STRING[] = "wangqi";
}namespace // 正确
{
char* CONST_STRING = "wangqi";
}namespace // 正确
{
const char* CONST_STRING = "wangqi";
}#endif // CONST_HEADER_H_
附:用 const 限定符比 #define 好的理由。
1. const 常量能明确指定类型;
2. 可以使用 C++ 的作用域规则将定义限制在特定的函数或文件中;
3. 可以将 const 用于更复杂的类型,如数组和结构。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/g5dsk/archive/2010/01/12/5182398.aspx
因此,可以将 const 常量定义在头文件中供工程中的多个其它文件包含引用,并且编译时不会产生变量重复定义的错误。当然,也可以用 #define 宏定义。
一般常量定义并无问题,但是,如果 const 要限定的是指针就须特别注意。这里以字符数组为例来说明。
01.// const_header.h
02.#ifndef CONST_HEADER_H_
03.#define CONST_HEADER_H_
04.
05.const char* CONST_STRING = "wangqi"; // 错误!指针 CONST_STRING 并非 const 常量,所以该头文件
06. // 被多个文件包含时,会有变量重复定义的编译错误。
07.
08.const char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是指向常量的常量指针。
09.const char CONST_STRING[] = "wangqi"; // 正确,CONST_STRING 是 const char [7] 类型。
10.char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是常量指针。
11.#define CONST_STRING "wangqi"; // 正确,传统用法。
12.
13.static char CONST_STRING[] = "wangqi"; // 正确
14.static char* CONST_STRING = "wangqi";
15.static const char* CONST_STRING = "wangqi"; // 正确
16.
17.namespace // 正确
18.{
19. char CONST_STRING[] = "wangqi";
20.}
21.
22.namespace // 正确
23.{
24. char* CONST_STRING = "wangqi";
25.}
26.
27.namespace // 正确
28.{
29. const char* CONST_STRING = "wangqi";
30.}
31.
32.#endif // CONST_HEADER_H_
// const_header.h
#ifndef CONST_HEADER_H_
#define CONST_HEADER_H_ const char* CONST_STRING = "wangqi"; // 错误!指针 CONST_STRING 并非 const 常量,所以该头文件
// 被多个文件包含时,会有变量重复定义的编译错误。const char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是指向常量的常量指针。
const char CONST_STRING[] = "wangqi"; // 正确,CONST_STRING 是 const char [7] 类型。
char* const CONST_STRING = "wangqi"; // 正确,CONST_STRING 是常量指针。
#define CONST_STRING "wangqi"; // 正确,传统用法。static char CONST_STRING[] = "wangqi"; // 正确
static char* CONST_STRING = "wangqi";
static const char* CONST_STRING = "wangqi"; // 正确namespace // 正确
{
char CONST_STRING[] = "wangqi";
}namespace // 正确
{
char* CONST_STRING = "wangqi";
}namespace // 正确
{
const char* CONST_STRING = "wangqi";
}#endif // CONST_HEADER_H_
附:用 const 限定符比 #define 好的理由。
1. const 常量能明确指定类型;
2. 可以使用 C++ 的作用域规则将定义限制在特定的函数或文件中;
3. 可以将 const 用于更复杂的类型,如数组和结构。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/g5dsk/archive/2010/01/12/5182398.aspx
头文件中定义const 全局变量应注意的问题
催眠过程中应注意的问题
标点符号使用中应注意的问题
家居装修中应注意的问题
科研资料和文献中应注意的问题
鱼病防治中应注意的十个问题
人民法院报《撤销权行使中应注意的问题》
应收帐款管理中应注意的问题
系统开发中应注意的基本问题
在化学药品的使用中应注意哪些问题
会议记录应注意的问题
送礼应注意的问题
送礼应注意的问题
艾灸应注意的问题
印刷应注意的问题
c++中const的应用
c++中const的应用
创设问题情景应注意的问题
装运港交货的三种常用贸易术语在具体业务中应注意的问题
装运港交货的三种常用贸易术语在具体业务中应注意的问题
贪污的构成要件及理解中应注意的问题罪
贪污的构成要件及理解中应注意的问题罪
硅胶干燥剂的再生,和再生中应注意的问题
后备种猪饲料中应注意的问题 - 猪e网 - 猪易网