6

私は定数を定義しています:

#define MAX_STR_LEN 100

私はこれをやろうとしています:

scanf("%" MAX_STR_LEN "s", p_buf);

しかしもちろん、それは機能しません。

上記のscanf呼び出しで使用できるように、MAX_STR_LEN数値を文字列に変換するために使用できるプリプロセッサのトリックは何ですか?基本的に:

scanf("%" XYZ(MAX_STR_LEN) "s", p_buf);

XYZ()はどうあるべきですか?

注:もちろん、「%100s」を直接実行することはできますが、それでは目的が果たせません。#define MAX_STR_LEN_STR "100"を実行することもできますが、より洗練されたソリューションを望んでいます。

4

1 に答える 1

20

#前処理演算子を使用します。この演算子はマクロ展開中にのみ機能するため、役立つマクロが必要になります。さらに、マクロ置換アルゴリズムに固有の特性により、間接化のレイヤーが必要です。結果は次のようになります。

#define STRINGIZE_(x) #x
#define STRINGIZE(x) STRINGIZE_(x)

scanf("%" STRINGIZE(MAX_STR_LEN) "s", p_buf);
于 2012-09-29T00:53:13.287 に答える