負の最小値を#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)
全ての製品名は、それぞれの所有者の商標または登録商標です。