2

文字列リテラル(この場合はファイルパス)を定義するために使用しようとして#defineいますが、別の#define'd要素からパスを取得できません。要するに、私はこのようなものが欲しいです:

#define X /var/stuff
#define Y "X/stuff.txt"

Yをとして与えるために"/var/stuff/stuff.txt"。これも可能ですか?よろしくお願いします。

編集:あるいは、このようなものは2つのリテラルを1つに連結しますか?

#define X "/var/stuff"
#define Y X"/stuff.txt"
4

1 に答える 1

3

あなたがそれを持っている方法ではありません、いいえ-マクロ置換は文字列リテラル内では起こりません。

ただし、ピースから文字列を貼り付けることはできます。

#define str(x) #x
#define expand(x) str(x)

#define X /var/stuff
#define Y expand(X) "/stuff.txt"

このためのクイックデモコード:

#include <iostream>

int main(){
    std::cout << Y;
}
于 2013-02-06T03:35:03.803 に答える