タグ付けされた質問 「stringification」


4
マクロを定義するプラグマ
プラグマステートメントを他のステートメントと一緒にマクロに埋め込む方法はありますか? 私は次のようなことを達成しようとしています: #define DEFINE_DELETE_OBJECT(type) \ void delete_ ## type_(int handle); \ void delete_ ## type(int handle); \ #pragma weak delete_ ## type_ = delete_ ## type ブーストソリューション(ウェーブ用に保存)があれば問題ありません。

3
Cプリプロセッサを使用してintを文字列に連結
Cプリプロセッサを使用して、#define'd intを#define' d文字列に連結する方法を理解しようとしています。私のコンパイラはCentOS 5上のGCC 4.1です。このソリューションはMinGWでも機能するはずです。 文字列にバージョン番号を追加したいのですが、それを機能させる唯一の方法は、バージョン番号の定義を文字列としてコピーすることです。 私が見つけた最も近いものはマクロ引数を引用する方法でしたが、それは#defines では機能しません これは機能しません。 #define MAJOR_VER 2 #define MINOR_VER 6 #define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER #値が数値であり、に展開されるため、sがなければ機能しません。"/home/user/.myapp" 2 6これは有効なCではありません。 これは機能しますが、バージョン定義のコピーを番号としても必要とするので、私はバージョン定義のコピーが好きではありません。 #define MAJOR_VER 2 #define MINOR_VER 6 #define MAJOR_VER_STR "2" #define MINOR_VER_STR "6" #define MY_FILE "/home/user/.myapp" MAJOR_VER_STRING MINOR_VER_STRING

13
##プリプロセッサオペレーターと考慮すべき問題のアプリケーションは何ですか?
以前の質問の多くで述べたように、私はK&Rを通じて作業しており、現在プリプロセッサーに取り組んでいます。さらに興味深いことの1つは、これまでCを学ぼうとした試みのどれからもこれまで私が知らなかったものですが、##プリプロセッサーオペレーターです。K&Rによると: プリプロセッサー演算子## は、マクロ展開中に実際の引数を連結する方法を提供します。置換テキストのパラメーターがに隣接している##場合、パラメーターは実際の引数に置き換えられ、 ##および周囲の空白が削除され、結果が再スキャンされます。たとえば、マクロpaste は2つの引数を連結します。 #define paste(front, back) front ## back そのpaste(name, 1)トークンを作成します name1。 現実世界でこれをどのように、そしてなぜ使用するのでしょうか?その実際の使用例は何ですか?考慮すべき落とし穴はありますか?

2
正確には、二重文字列化のトリックはどのように機能しますか?
少なくとも一部のCプリプロセッサでは、マクロを文字列化する関数のようなマクロから別のマクロに渡すことで、マクロの名前ではなく値を文字列化できます。 #define STR1(x) #x #define STR2(x) STR1(x) #define THE_ANSWER 42 #define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */ ここでの使用例の例。 これは、少なくともGCCとClang(両方とも-std=c99)では機能しますが、C標準の用語でどのように機能するかはわかりません。 この動作はC99によって保証されていますか? もしそうなら、C99はどのようにそれを保証しますか? そうでない場合、動作はどの時点でC定義からGCC定義に移行しますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.