web-dev-qa-db-ja.com

g(およびその他のUnicode文字)識別子の中でg ++では許可されていません

私は ???? ですが、 ???? をg ++ 4.7で有効な識別子として使用できません。 -fextended-identifiersオプションが有効:

int main(int argc, const char* argv[])
{
  const char* ???? = "I'm very happy";
  return 0;
}

main.cpp:3:3:エラー:プログラム内の浮遊 ‘\ 360’
main.cpp:3:3:エラー:プログラム内の浮遊 ‘\ 237’
main.cpp:3:3:エラー:プログラム内の「230」
main.cpp:3:3:エラー:プログラム内の浮遊 ‘\ 203’

グーグルで調べたところ、 UTF-8文字は識別子 ではまだサポートされていませんが、universal-character-name動作するはずです。だから私は私のソースを次のように変換します:

int main(int argc, const char* argv[])
{
  const char* \U0001F603 = "I'm very happy";
  return 0;
}

main.cpp:3:15:エラー:ユニバーサル文字\ U0001F603は識別子では無効です

どうやら????は有効な識別子文字ではありません。ただし、この標準では特に、付録E.1の10000-1FFFDの範囲の文字を許可しており、E.2の最初の文字としては許可していません。私の次の取り組みは、他に許可されたUnicode文字が機能するかどうかを確認することでした。常に重要な PILE OF POO(????) 文字すらありません。

それで、意味のある説明的な変数名のために、何が与えられますか?宣伝するかどうかにかかわらず、-fextended-identifiersは機能しますか?最新のビルドでのみサポートされていますか?そして、他のコンパイラはどのようなサポートをしていますか?

57

これはGCCの既知のバグです: バグ67224-GCCでの識別子名のUTF-8サポート

バグレポートは2015年のもので、かなり長い議論があります。 ある時点 では、「この機能に対する十分な需要がないため、企業がそれに資金を提供したり、ボランティアがそれを実装するためにステップアップしたりしているようです。」

したがって、このStackOverflowトピックが解決策を探していることを発見した場合は、あそこのディスカッションに追加して、実際に需要があることを示すことができます。

7
Daniel Wolf

ただし、この規格では特に、付録E.1で10000〜1FFFDの範囲の文字を許可しており、E.2では最初の文字として許可していません。

C++標準で一部の機能が許可(または禁止)されているからといって、コンパイラがその機能をサポートしている(またはサポートしていない)とは限らないことに注意してください。

5
Code-Apprentice