extern const int

短命女 2022-09-20 11:18 188阅读 0赞
  1. 具体问题场景:
    需要在A.cpp中定义一个const常量,并在B.cpp中引用这个常量,出错的场景:
    // A.cpp
    const int NUM = 100;

// B.cpp
extern const int NUM;

// 编译错误,错误提示外部符号NUM无法解析,未定义。

  1. 出错原因:
    const对象默认为文件的局部变量。
  1. 关于非const:
    在全局作用域里定义非const变量时,它在整个程序中都可以访问。可以把一个非const变量定义在一个文件中,并在另外的文件中使用这个变量:
    // A.cpp
    int counter; // 定义非const变量counter

// B.cpp
extern int counter; // 对A.cpp中的非const变量counter进行声明引用
++counter; // 使用非const变量counter

  1. 关于const:
    在全局作用域声明的const变量是定义在该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。通过显式地指定const变量为extern,就可以在整个程序中访问const对象。
    // A.cpp
    extern const int NUM = 100;

// B.cpp
extern const int NUM;
for (i = 0; i < NUM; i++)

// 注意:B.cpp中的NUM也是extern,但是这个extern标志着NUM是一个声明,所以没有初始化式。

  1. 列举几种情形的对与错:
    (1)ERROR: B.cpp中的NUM无法解析,未定义。
    // A.cpp
    const int NUM = 100;

// B.cpp
extern const int NUM;
int i = NUM;

(2)OK
// A.cpp
const int NUM = 100;

// B.cpp
extern const int NUM = 99;
int i = NUM;

(3)OK
// A.cpp
extern const int NUM = 100;

// B.cpp
extern const int NUM;
int i = NUM;

(4)ERROR: NUM重定义
// A.cpp
extern const int NUM = 100;

// B.cpp
extern const int NUM = 99;
int i = NUM;

(5)OK
// A.cpp
extern const int NUM = 100;

// B.cpp
const int NUM = 99;
int i = NUM;

(6)OK
// A.cpp
const int NUM = 100;

// B.cpp
extern const int NUM = 99;
int i = NUM;

  1. 几种声明使用常量的方法:
    (1)在一个.cpp文件中使用extern定义const常量,在使用的地方extern声明引用。
    (2)全部在头文件中进行const定义,在使用的地方包含头文件,但不要使用extern,否则多个包含此头文件的.cpp文件将出现重定义错误。
    (3)在一个.cpp文件中extern定义,在头文件中extern声明,在使用的地方包含头文件(适用于大量常量情形)。
    (4)避免常量,使用函数:
    double PI()
    {
    return 3.1415926;
    }

发表评论

表情:
评论列表 (有 0 条评论,188人围观)

还没有评论,来说两句吧...

相关阅读

    相关 extern const int

    1. 具体问题场景: 需要在A.cpp中定义一个const常量,并在B.cpp中引用这个常量,出错的场景: // A.cpp const int NUM = 100