Renesas Synergy™

FAQ 104067 : const宣言したにも関わらず変数がROMに配置されません。

Q: 質問

const宣言したにも関わらず変数がROMに配置されません。 


A: 回答

初期値付きポインタ配列(または変数)が ROMに配置されない状況と推測します。
宣言において constの位置が、ポインタを示す"*"の前にあるか、後ろにあるかによって意味合いが異なります。
下例の宣言(1)の場合、ポインタ配列はRAMに配置します。

(例)

char a, b;
const char *p[2] = { &a, &b };       …(1)
char *const q[2] = { &a, &b };       …(2)
const char *const r[2] = { &a, &b }; …(3)
  • 宣言(1)
    コンパイラは、*p[0],*p[1]の変更を禁止します。
    p[0],p[1]は変更可。
    つまり、ポインタ配列をRAMに配置し、ポインタの指す先が ROMである場合、(1)のように宣言します。
  • 宣言(2)
    コンパイラは、q[0],q[1]の変更を禁止します。
    *q[0],*q[1]は変更可。
    つまり、ポインタ配列をROMに配置し、ポインタの指す先が RAMである場合、(2)のように宣言します。
  • 宣言(3)
    コンパイラは、*r[0],*r[1],r[0],r[1]の変更を禁止します。
    つまり、ポインタ配列、および、ポインタの指す先ともROMである場合、(3)のように宣言します。

適用製品

SuperHファミリ用C/C++コンパイラパッケージ
M32Rファミリ用C/C++コンパイラパッケージ [M3T-CC32R]
RXファミリ用C/C++コンパイラパッケージ
RL78ファミリ用Cコンパイラパッケージ
R8C, M16Cファミリ用C/C++コンパイラパッケージ
M16Cシリーズ,R8Cファミリ用C/C++コンパイラパッケージ [M3T-NC30WA]
R32Cシリーズ用Cコンパイラパッケージ
M32Cシリーズ用Cコンパイラパッケージ [M3T-NC308WA]
H8SX,H8S,H8ファミリ用C/C++コンパイラパッケージ
740ファミリ用Cコンパイラパッケージ [M3T-ICC740]
他にご質問がございましたら、リクエストを送信してください