['"や#のような文字で識別子名を書く方法を探しています。
私がそれをしようとするたびに、私はエラーを出します:
エラー:マクロ名は識別子である必要があります
しかし、gccについて学んで、私はこのオプションを見つけました:
-拡張識別子
しかし、それは私が望んでいたようには機能していないようです、お願いします、誰かがそれを達成する方法を知っていますか?
['"や#のような文字で識別子名を書く方法を探しています。
私がそれをしようとするたびに、私はエラーを出します:
エラー:マクロ名は識別子である必要があります
しかし、gccについて学んで、私はこのオプションを見つけました:
-拡張識別子
しかし、それは私が望んでいたようには機能していないようです、お願いします、誰かがそれを達成する方法を知っていますか?
識別子にそのような文字を含めることはできません。言語構文では、識別子は文字、数字、または下線であると定義されています (リテラル数字によるあいまいさを避けるために、数字で始めてはなりません)。
可能であれば、これは C コンパイラ (配列に [ を使用) および C プリプロセッサ構文 (# を使用) と競合します。拡張識別子拡張では、識別子内の言語構文で禁止されていない文字 (基本的には Unicode 外国文字など) の使用のみが許可されます。
しかし、もしあなたが本当にこれをやりたいのなら、あなた自身の「拡張マクロプリプロセッサ」でソースファイルを前処理して、事実上新しい「Cライク」言語を作成することを禁じるものは何もありません。これはひどいアイデアのように見えますが、実行するのはそれほど難しくありません。そうすれば、なぜそれが良い考えではないのか、すぐに自分でわかるでしょう...
このリンクによると-fextended-identifiers
、識別子のUTF-8サポートのみを有効にするため、あなたの場合には役に立ちません。
したがって、答えは次のとおりです。マクロ識別子でそのような文字を使用することはできません。
拡張識別子文字のサポートが完全に有効になっている場合でも、次のような文字を取得するのに役立ちません。
[ ' " #
識別子が有効になっています。この標準では、「ユニバーサル文字名」または「その他の実装定義文字」を識別子の一部にすることができますが、基本文字セットの一部にすることはできません。基本的な文字セットのうち_
、文字と数字のみを識別子名に含めることができます(6.4.2.1識別子/一般)。