Caracteres Unicode / especiais em nomes de variáveis em clang não são permitidos?
Esta pergunta possui texto unicode que pode não ser exibido corretamente em todos os navegadores.
clang
agora (> 3.3) suporta caracteres unicode emnomes de variáveis http://llvm.org/releases/3.3/tools/clang/docs/ReleaseNotes.html#major-new-features.
No entanto, alguns caracteres especiais ainda são proibidos.
int main(){
double α = 2.; // alpha, ok!
double ∞ = 99999.; // infinity, error
}
dando:
error: non-ASCII characters are not allowed outside of literals and identifiers
double ∞ = 99999.;
Qual é a diferença fundamental entreα
(alfa) e∞
(infinty) paraclang
? Que o primeiro é unicode e o último não é unicode, mas ao mesmo tempo não é ASCII?
Existe uma solução alternativa ou uma opção para permitir esse conjunto de caracteres emclang
(ou entregcc
)?
Notas: 1)∞
é apenas um exemplo, existem muitos caracteres potencialmente úteis, mas também proibidos, como∫
ou∂
. 2) Não estou perguntando se é uma boa ideia, por favor, tome isso como uma questão técnica. 3) Estou interessado no compilador C ++ declang 3.4
no Linux (gcc 4.8.3
não suporta isso). Estou salvando os arquivos de origem comgedit
usandoUTF-8
codificação eUnix/Linux
final de linha. 4) adicionar outros primeiros caracteres normais não ajuda:_∞
As respostas apontam para um NÃO definido. De fato, alguns intervalos não são permitidos nem serão em breve. Para dar um passo à frente, para a loucura total, a melhor alternativa que encontrei foi usar personagens que pareçam efetivamente iguais. (Agora,esta Devo admitir que não é uma boa ideia.) Essas alternativas podem ser encontradas aquihttp://shapecatcher.com/. O resultado (desculpe se isso machuca seus olhos):
// double ∞ = 99999.; // still error
// double ⧞ = 99999.; // infinity negated still error
double ꝏ = 99999.; // letter oo
double Ꝏ = 99999.; // letter OO
// double ⧜ = 99999.; // incomplete infinity still error
Outros toques mortos "alternativos" mencionados na pergunta que estão no intervalo permitido:ʃ
, .