Linuxでclang++を使用してコンパイルするc++プログラムの関数/変数名にUnicode文字(\ aphaなど)を使用することに興味があります。すべてが正常にコンパイルされることを確認するための良いガイド/ルールのリストを知っている人はいますか/リンクエラーを回避します/...
ありがとう!
Clang 3.0は、識別子のUnicode文字をサポートしていません。最新のトランクはこれを部分的にサポートしており、現在誰かがこれを完全に実装するために取り組んでいると思います。
Clangがそれらをサポートする場合については、C ++ 11(n3242)2.11[lex.name]を参照してください。
[a-zA-Z_0-9]
識別子のすべての文字は、E.1の文字のセットと一致する必要があります。
00A8, 00AA, 00AD, 00AF, 00B2-00B5, 00B7-00BA, 00BC-00BE, 00C0-00D6, 00D8-00F6, 00F8-00FF
0100-167F, 1681-180D, 180F-1FFF
200B-200D, 202A-202E, 203F-2040, 2054, 2060-206F
2070-218F, 2460-24FF, 2776-2793, 2C00-2DFF, 2E80-2FFF
3004-3007, 3021-302F, 3031-303F
3040-D7FF
F900-FD3D, FD40-FDCF, FDF0-FE44, FE47-FFFD
10000-1FFFD, 20000-2FFFD, 30000-3FFFD, 40000-4FFFD, 50000-5FFFD,
60000-6FFFD, 70000-7FFFD, 80000-8FFFD, 90000-9FFFD, A0000-AFFFD,
B0000-BFFFD, C0000-CFFFD, D0000-DFFFD, E0000-EFFF
[a-zA-Z_]
最初の文字は、E.2を除くE.1と一致する必要があります。
0300-036F, 1DC0-1DFF, 20D0-20FF, FE20-FE2F
リンクに関しては、使用しているC++ABIを確認する必要があります。この場合(ClangおよびLinux)は、Itanium C++ABIになります。
そして...永遠に検索した後、私が見つけたのはJNIとgccの内部だけでした。Clangがこれを実装する場合、gccと同じマングリングを使用します。いずれにせよ、Unicode識別子を使用してコンパイルするすべてのコードが同じコンパイラでコンパイルされている限り、正しくリンクされます。