3

['"や#のような文字で識別子名を書く方法を探しています。

私がそれをしようとするたびに、私はエラーを出します:

エラー:マクロ名は識別子である必要があります

しかし、gccについて学んで、私はこのオプションを見つけました:

-拡張識別子

しかし、それは私が望んでいたようには機能していないようです、お願いします、誰かがそれを達成する方法を知っていますか?

4

3 に答える 3

2

識別子にそのような文字を含めることはできません。言語構文では、識別子は文字、数字、または下線であると定義されています (リテラル数字によるあいまいさを避けるために、数字で始めてはなりません)。

可能であれば、これは C コンパイラ (配列に [ を使用) および C プリプロセッサ構文 (# を使用) と競合します。拡張識別子拡張では、識別子内の言語構文で禁止されていない文字 (基本的には Unicode 外国文字など) の使用のみが許可されます。

しかし、もしあなたが本当にこれをやりたいのなら、あなた自身の「拡張マクロプリプロセッサ」でソースファイルを前処理して、事実上新しい「Cライク」言語を作成することを禁じるものは何もありません。これはひどいアイデアのように見えますが、実行するのはそれほど難しくありません。そうすれば、なぜそれが良い考えではないのか、すぐに自分でわかるでしょう...

于 2011-01-19T19:44:25.680 に答える
1

このリンクによると-fextended-identifiers、識別子のUTF-8サポートのみを有効にするため、あなたの場合には役に立ちません。

したがって、答えは次のとおりです。マクロ識別子でそのような文字を使用することはできません。

于 2011-01-19T19:40:03.440 に答える
0

拡張識別子文字のサポートが完全に有効になっている場合でも、次のような文字を取得するのに役立ちません。

[ ' " #

識別子が有効になっています。この標準では、「ユニバーサル文字名」または「その他の実装定義文字」を識別子の一部にすることができますが、基本文字セットの一部にすることはできません。基本的な文字セットのうち_、文字と数字のみを識別子名に含めることができます(6.4.2.1識別子/一般)。

于 2011-01-19T20:03:33.327 に答える