1. ホーム
  2. c

[解決済み] Cプリプロセッサによるint型と文字列の結合

2022-11-11 13:16:18

質問

を連結する方法を考えています。 #define d int を #define d の文字列に変換します。 C プリプロセッサーを使用しています。 私のコンパイラはGCC 4.1 on CentOS 5です。 この解決策は、MinGWでも動作するはずです。

バージョン番号を文字列に付加したいのですが、バージョン番号の定義を文字列としてコピーする方法しかありません。

一番近いのは、マクロの引数を引用する方法でしたが、これは #define s

これはうまくいきません。

#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" #MAJOR_VER #MINOR_VER

がないと動きません。 # がないと動作しません。なぜなら、値が数字なので "/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

どのように解決するのですか?

Cプリプロセッサの古典的な質問です...。

#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)

#define MAJOR_VER 2
#define MINOR_VER 6
#define MY_FILE "/home/user/.myapp" STR(MAJOR_VER) STR(MINOR_VER)

この間接的なレベルの追加により、プリプロセッサは文字列に変換される前にマクロを展開することができます。