2010-04-03 43 views
5

Tôi quan tâm đến việc sử dụng các ký tự unicode (như \ apha) trong các tên hàm/varaible trong chương trình C++ mà tôi sẽ biên dịch với clang ++ trên linux. Có ai biết về một hướng dẫn tốt/danh sách các quy tắc để đi theo để đảm bảo rằng tất cả mọi thứ kết thúc lên biên dịch tốt/tránh liên kết lỗi/...llvm-clang; function/variable names chứa unicode charactrs

Cảm ơn!

+0

Chỉ vì tò mò, bạn có đang di chuyển từ APL không? –

+0

'clang ++' 3.4 hỗ trợ điều này. Kể từ 3.3 (http://llvm.org/releases/3.3/tools/clang/docs/ReleaseNotes.html#major-new-features) – alfC

Trả lời

5

Clang 3.0 không hỗ trợ các ký tự Unicode trong số nhận dạng. Thân cây mới nhất đã hỗ trợ một phần cho điều này, và tôi tin rằng ai đó hiện đang làm việc để thực hiện điều này đầy đủ.

Khi Clang hỗ trợ chúng, hãy xem C++ 11 (n3242) 2.11 [lex.name].

Tất cả các nhân vật trong một định phải phù hợp [a-zA-Z_0-9] hoặc tập các nhân vật trong 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 

Ký tự đầu tiên phải phù hợp [a-zA-Z_] hoặc E.1 trừ E.2:

0300-036F, 1DC0-1DFF, 20D0-20FF, FE20-FE2F 

Đối với liên kết, chúng ta cần phải xem xét C++ ABI bạn đang sử dụng. Trong trường hợp này (Clang và Linux), nó sẽ là Itanium C++ ABI.

Và ... sau khi tìm kiếm xung quanh mãi mãi, những điều duy nhất tôi có thể tìm thấy trên JNI và gcc internals. Khi Clang thực hiện điều này, nó sẽ sử dụng xoài giống như gcc. Dù bằng cách nào, miễn là tất cả các mã bạn biên dịch bằng cách sử dụng định danh unicode được biên dịch với trình biên dịch tương tự, nó sẽ liên kết chính xác.