Я 😞, чтобы найти, что я не могу использовать 😃 как действительный идентификатор с 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 в программе
После некоторого поиска в Google я обнаружил, что символы UTF-8 еще не поддерживаются в идентификаторах, но универсальное имя-символ должно работать. Поэтому я конвертирую свой источник в:
int main(int argc, const char* argv[])
{
const char* \U0001F603 = "I'm very happy";
return 0;
}
main.cpp: 3: 15: ошибка: универсальный символ \U0001F603 недействителен в идентификаторе
Таким образом, очевидно, что 😃 не является допустимым символом идентификатора. Однако стандарт специально позволяет использовать символы из диапазона 10000-1FFFD
в Приложении E.1 и не запрещает его как начальный символ в E.2. Следующее мое усилие состояло в том, чтобы увидеть, работают ли какие-либо другие символы юникода, но никто из них не пытался. Даже не имеющий значения PILE OF POO (💩).
Итак, ради значимых и описательных имен переменных, что дает? Делает ли -fextended-identifiers
, как он рекламирует или нет? Поддерживается ли это только в самой последней сборке? И какая поддержка у других компиляторов?