カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810657
FAQカテゴリ(大) コンパイラ
最終更新日 2016-01-27

質問内容

TN60149: 負の最小値を#defineするには?

回答内容

ターゲット:ARM
コンポーネント:コンパイラ
公開日:2010年11月18日16時08分

 

概要
このテクニカルノートでは 「コンパイラのワーニングなしに、負の最小の数を#defineするにはどうしたら良いか」の質問に答えます。

このテクニカルノートは ARM用 IAR C/C++ Compiler と他のいくつかの IAR C/C++ コンパイラに適用されます。

 

問題
可能な限り小さい値の #define を作ると IAR C/C++ コンパイラはワーニングを表示して値の符号を反転させます。 

#define MIN_VALUE (-2147483648L)
signed long lValue;
lValue = (MIN_VALUE + 1);

 

例(32ビット整数)

文字列
-2147483648L

... コンパイラはこの文字列を2つの部分に分けて解釈します。.

-

.. は負の符号、 2番目は、

2147483648L

...を定数として解釈します。そうすると、LONG_MAX より大きくなります。

 

解決策

#define MIN_VALUE (-2147483647L - 1)

 

すべての製品名は、各社の商標または登録商標です。

参考資料URL