在一个项目中,我需要定义一个const int,我在头文件中定义它:
extern const int a;
Run Code Online (Sandbox Code Playgroud)
我多次包含该标题.然后只在一个源文件中,我把:
const int a=10;
Run Code Online (Sandbox Code Playgroud)
但是当我需要在数组绑定中使用a时; 即:
int anarray[a];
Run Code Online (Sandbox Code Playgroud)
我明白了:
"array bound is not an integer constant"
Run Code Online (Sandbox Code Playgroud)
错误.为什么?
CB *_*ley 12
数组绑定必须是一个整数常量表达式.要成为一个整数常量表达式,只有在使用常量表达式初始化表达式时,表达式才必须仅涉及(在其他一些事物中)文字,enum值和const变量或static数据成员.
const如果整数类型的变量没有初始化器,则它们不是整型常量表达式.
它是一种语言规则,允许实现在编译时知道某些常量值,而不必了解其他转换单元(可能不会同时编译,也可能独立更改).
const命名空间范围内的变量默认具有内部链接(即没有显式extern),因此如果您执行此类操作,则不会出现任何多重定义问题.
// header.h
const int a = 10;
Run Code Online (Sandbox Code Playgroud)
.
// source.cpp
int anarray[a];
Run Code Online (Sandbox Code Playgroud)
数组维度需要在编译时知道.对于诸如此类的常量,您可能需要考虑使用枚举.这样它的值在标题中可见,并且在调试时仍然会得到符号名称(与使用#define不同).
// foo.h
enum {
a = 10; // array dimension
};
Run Code Online (Sandbox Code Playgroud)
和
// foo.c
#include "foo.h"
int anarray[a];
Run Code Online (Sandbox Code Playgroud)