Renesas Synergy™

FAQ 104472 : プリプロセスコマンド"#define"で文字列に数値を定義していますが、定義した文字列を使った式の結果が期待する値にならないのはなぜですか?

Q: 質問

プリプロセスコマンド"#define"で文字列に数値を定義していますが、定義した文字列を使った式の結果が期待する値にならないのはなぜですか?

以下の例で、culの値が期待値 0x04AAA になりません。

[プログラム例]

#define V1 0x040000
#define V2 0x0AAAA + V1
cul = (WORD *)v2


A: 回答

上記プログラム例では、 #define を展開した結果の式は以下のようになります。
※ #define を展開する時は単に文字列置換になります。

cul = ( WORD *)0x0AAAA+ 0x040000;

この式では、(WORD *) のキャストは 0x0AAAA にのみかかり、これに対して 0x040000 が加算されます。
実際にはintへのポインタに加算しているので 0x80000 です。

期待する値を得るためには、以下のように #define で定義する式に対して () を付けてください。

[プログラム例]

#define V2  (0x0AAAA + V1)

適用製品

M16Cシリーズ,R8Cファミリ用C/C++コンパイラパッケージ [M3T-NC30WA]
他にご質問がございましたら、リクエストを送信してください