Soy para encontrar que no puedo usar como un identificador válido con g ++ 4.7, incluso con la opción -fextended-identifiers
habilitado:(y otros caracteres Unicode) en identificadores no permitidos por g ++
int main(int argc, const char* argv[])
{
const char* = "I'm very happy";
return 0;
}
main.cpp:3:3: error: stray ‘\360’ in program
main.cpp:3:3: error: stray ‘\237’ in program
main.cpp:3:3: error: stray ‘\230’ in program
main.cpp:3:3: error: stray ‘\203’ in program
Después de buscar en Google, descubrí que UTF-8 characters are not yet supported in identifiers pero un universal-character-name debería funcionar. Así que puedo convertir mi fuente a:
int main(int argc, const char* argv[])
{
const char* \U0001F603 = "I'm very happy";
return 0;
}
main.cpp:3:15: error: universal character \U0001F603 is not valid in an identifier
Así que al parecer no es un carácter identificador válido. Sin embargo, el estándar permite específicamente caracteres del rango 10000-1FFFD
en el Anexo E.1 y no lo desautoriza como un carácter inicial en E.2. Mi siguiente esfuerzo fue ver si funcionaban otros caracteres Unicode permitidos, pero ninguno de los que intenté lo hizo. Ni siquiera el siempre importante personaje PILE OF POO().
Por lo tanto, en aras de nombres de variables significativos y descriptivos, ¿qué ofrece? ¿-fextended-identifiers
hace lo que anuncia o no? ¿Solo se admite en la versión más reciente? ¿Y qué tipo de soporte tienen otros compiladores?
Leer [esto] (http:.//www.learncpp.com/cpp-tutorial/22-keywords-and-naming-identifiers/). – ErikEsTT
@ErikEsTT Lamentablemente, esa página no menciona que un identificador puede contener un 'universal-character-name', así que cualquier consejo ceden a las convenciones de nomenclatura, no tienen en cuenta la importancia de usar caras sonrientes como nombres de variables. Consulte la §2.11 de ISO/IEC 14882: 2011 (E). –
Hmm, parece que el programa 'static const char * x =" I estoy muy feliz ";' crash clang 3.1 ... – kennytm