私はいくつかのメモリポインタを扱っています。私はハッシュ定義を使いたくありません。その議論は脇に置いておいてください。これがコンパイルされない理由を知りたいだけです:
#include <stdio.h>
static const unsigned long *const pMemAddrA = (unsigned long *) 0x00000200ul;
static const unsigned long *const pMemAddrB = pMemAddrA;
int main (void)
{
printf("%x", (unsigned int) pMemAddrB);
return 0;
}
コンパイラ出力 gcc:
||=== TestConst, Debug ===|
...main.c|4|error: initializer element is not constant|
||=== Build finished: 1 errors, 0 warnings ===|
編集:
回答を読んだ後、この問題に対処する方法を知ってうれしく思います。
しかし、なぜそれが問題なのかわかりません。私が知っていることから、プログラムの開始時に静的メモリが割り当てられます。変数が異なるファイルに「存在」し、変数が割り当てられる順序がコンパイラによって保証されない場合、問題があることを私は知っています。ただし、両方の変数が同じファイルに「存在する」場合-同じ関数に両方の変数が存在するのと同じように-ファイルで宣言されている変数の順序でメモリが割り当てられることをコンパイラーが保証できると思います。別の const ポインターへの const ポインターを宣言して初期化することが問題である理由を理解していません。どなたか教えていただけると幸いです。