0

Visual C++ では、次の関数宣言が与えられます。

int main();

関数本体で、関数の(戻り)型と同じ型を持つ変数を定義したいのですが、intもmainも使いたくないので、次のようにしてみました:

int main() {
    decltype(__identifier(__FUNCTION__)) x;
}

__identifier は文字列リテラルを受け入れないため、これは機能しません。文字列リテラルを識別子にする方法を使用できますか? または、戻り値の型 (int) や関数名 (main) を使用せずに、関数本体内で int 型の x を定義する方法はありますか?

4

1 に答える 1

1

実際には、文字列リテラルを受け入れますが、機能させるには警告を抑制する必要があります。あなたはこれを行うことができます:

#define SYMBOL_FROM_STRING(S) (__pragma(warning(suppress: 4483)) __identifier(S))

decltype(SYMBOL_FROM_STRING(__FUNCTION__)) x;
于 2016-03-25T05:42:24.147 に答える