1. ホーム
  2. c++

[解決済み】TRUEとFALSEのマクロの定義がおかしい件

2022-04-19 06:25:48

質問

コーディングの本で、以下のようなマクロの定義を見たことがあります。

#define TRUE  '/'/'/'
#define FALSE '-'-'-'

そこには何の説明もなかった。

として、これらがどのように機能するのか、ご説明ください。 TRUEFALSE .

解決方法は?

見てみましょう。 '/' / '/' というのは char リテラル / で割ると char リテラル '/' そのものです。結果は1であり、これは TRUE .

そして '-' - '-' というのは char リテラル '-' を、自分自身から引きます。これは、ゼロ( FALSE ).

これには2つの問題があります。1つは、読みにくいこと。使用方法 10 の方が絶対に良い。また、TartanLlamaやKerrekSBが指摘しているように、もしその定義を使うことがあれば、驚かないように括弧で囲ってください。

#include <stdio.h>

#define TRUE  '/'/'/'
#define FALSE '-'-'-'

int main() {
        printf ("%d\n", 2 * FALSE);
        return 0;
}

の値を表示します。 char リテラル '-' (私のシステムでは45)。

括弧付きで。

#define TRUE  ('/'/'/')
#define FALSE ('-'-'-')

しかし、これはマクロを括弧でくくらないと、このような予期せぬバグに悩まされる例です。