0
static const unsigned char BitsSetTable256[256] = 
{
#   define B2(n) n,     n+1,     n+1,     n+2
#   define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2)
#   define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2)
    B6(0), B6(1), B6(1), B6(2)
};

このコードはセット ビット問題で非常に有名です。コンパイル時にルックアップ テーブルを出力する方法を理解しました。

しかし、これにはもっと直感が必要です..

B2(n)、B4(n)、B6(n)の意味は??
そして、この再帰マクロに帰着する基本的なアイデアは何ですか??

編集された再帰の背後にあるアイデアは何ですか

4

3 に答える 3

0

「この再帰マクロに要約される基本的な考え方」

B2(n) は以下を生成します。n, n+1, n+1, n+2

自分自身で調べて:-

gcc -E file_name.c

于 2013-08-10T06:59:27.443 に答える
0

思い出してください:マクロは、プログラムがコンパイルされる前に、プリプロセッサによって処理されます。コードを「コンパイル」するときに発生する 3 つの手順があります。

  1. 前処理 (すべてのプリプロセッサ ディレクティブを処理します)。
  2. C ソース ファイルをオブジェクト ファイルにコンパイルする (マシン コードに変換する)。
  3. すべてのオブジェクト ファイルとその他のライブラリの適切性を 1 つの実行可能ファイルにリンクします。

B2(n)次のことを行います。

n, n + 1, n + 2

...どこにn数字がありますか。


Bxマクロの要点は、ビット テーブルを再帰的に構築することです。

于 2013-08-10T06:57:05.130 に答える