-2

現在、私は使用しています:

#define p printf(

プログラム全体でprintf内で使用する文字の量を減らすために、たとえば、次の代わりに:

printf("Hello, World.");

できます:

p"Hello, World.");

私の質問は、これをさらに短縮することは可能ですか? たとえば、終了ブレースを定義に追加しますか? (疑似コード) のようなもの:

#define p printf()

またはそのようなもの?または、#define を行うより短い方法ですか?

編集:忘却に反対票を投じる前に、明確にした方がよいでしょう。これのポイントは、私が怠け者だから、または読めないようにしたいから、キーストロークを節約することではありません。私は問題のプログラムを既に作成しており (これは非常に読みやすく、プログラマーの地獄に落ちないことを願っています)、文字数をどれだけ少なくできるかについて興味があります。この質問はそうするのに役立ちます。

4

4 に答える 4

3

可変長引数でマクロを使用できます。

#define p(...) printf(__VA_ARGS__)

のような名前pは良い考えではありませんが、この構文は条件付きログで非常にうまく使用できます。例えば:

#ifndef NDEBUG
# define log(...) fprintf(stderr, __VA_ARGS__)
#else
# define log(...) ((void)0)
#endif

場合によっては、フォーマット指定子で特定のことをしたい場合があります。そのために、次のような gcc 拡張機能 (および場合によっては他のコンパイラ) を利用できます。

#define log(fmt, ...) fprintf(stderr, "Log: "fmt"\n", ##__VA_ARGS__)

標準で##__VA_ARGS__はありませんのでご注意ください。この回答も参照してください。

于 2013-02-23T03:52:35.117 に答える
0

はい、あなたのマクロは議論をすることができます

http://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html

于 2013-02-23T03:44:43.090 に答える
0

それは悪です。キーストロークを保存しようとするのをやめ、代わりにタイピングスキルを向上させてください。通常のCプログラマーにとってコードが読みにくくなるため、この方法でコードを「単純化」するのはマクロの適切な使用法ではありません。読みやすさを常に念頭に置いてください。

System.out.println代わりに書く必要がないことを嬉しく思います。

于 2013-02-23T03:48:39.277 に答える
0

実証された必要性に基づいて、プットを検討してください

これは、可変数の引数を取らないため、マクロ化する方が安全/優れています。printf を取得し、その使用を制限しました。また、ユーザーが p("%d") と入力すると、プログラムが爆発します。

于 2013-02-23T03:51:17.037 に答える