08/05/13 14:34:04
>>699
実装によっては可能かもしれないが、直接に行うことは一般的にはできない。
constな変数はそれが作成されたときに(関数の外で宣言される変数ならプログラムの開始時、あらゆる関数の外で)初期化されて
以後のコード中では変更できなくなるため、実質的にコンパイル時に解決可能な式でしか初期化できない。
ポインタを間にはさめば、以下のような方法で似たようなものを間接的に宣言することができる。
value.c)
static int value;
const int * const vp=&value;
value.h)
extern const int * const vp;
#define VALUE (*vp)
このようにしておけば、グローバル変数(のふりをしているマクロ)VALUEの実体であるvalueは、少なくともvalue.c以外で変更されることはない。