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

テクニカル・ノート 60149

アーキテクチャ:

ARM

コンポーネント:

compiler

更新日:

2018/08/13 8:26

はじめに

本テクニカルノートでは、次の質問に答えます: 「コンパイラで警告を表示させずに#defineで最小の負数を定義するにはどうすればよいでしょうか?」

これは、IAR C/C++ Compiler for ARMと他のいくつかのIAR C/C++ Compilerに適用されます。

問題

使用可能な最小値を#defineで定義すると、IAR C/C++ Compilerで警告が表示され、その値の符号が変更されます。

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

例(32ビット整数の場合)

The string of...
-2147483648L

は、コンパイラでは2つに分けて解釈されます。まず、

-

が「マイナス演算子」として解釈され、次に、

2147483648L

が定数として解釈されます。そして、この定数はLONG_MAXより大きいと解釈されます。

解決方法

#define MIN_VALUE (-2147483647L - 1)

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。