如何正确定义.h文件中的const int?

时间:2010-11-18 22:11:11

标签: c++ header

在一个项目中,我需要定义一个const int,我在头文件中定义它:

 extern const int a;

我多次包含该标题。然后在一个源文件中,我把:

const int a=10;

但是当我需要在数组绑定中使用a时;即:

int anarray[a];

我明白了:

"array bound is not an integer constant"

错误。为什么呢?

3 个答案:

答案 0 :(得分:12)

数组绑定必须是整数常量表达式。要成为整数常量表达式,表达式必须仅涉及(在其他一些事物中)文字,enum值和const变量或static数据成员< strong>仅当使用常量表达式 初始化它们时。

const整数类型的变量如果没有初始值设定项,则不是整数常量表达式

这是一种语言规则,允许实现在编译时知道某些常量值,而不必了解其他翻译单元(可能不会同时编译,也可能单独更改)。

命名空间范围内的

const变量默认情况下具有内部链接(即没有明确的extern),因此如果您执行此类操作,则不会出现任何多重定义问题。

// header.h
const int a = 10;

// source.cpp
int anarray[a];

答案 1 :(得分:5)

需要在编译时知道数组维度。对于诸如此类的常量,您可能需要考虑使用枚举。这样它的值在标题中可见,并且在调试时仍然会得到符号名称(与使用#define不同)。

// foo.h

enum {
    a = 10; // array dimension
};

// foo.c

#include "foo.h"

int anarray[a];

答案 2 :(得分:2)

需要在编译时知道常量的值。 extern变量不是这样的:如果有的话,它们的值只能在链接时确定,这在编译步骤之后。因此,就编译器而言,extern 不是常量。