I am ?? to find that I cannot use ?? as a valid identifier with g++ 4.7, even with the -fextended-identifiers
option enabled:
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
After some googling, I discovered that UTF-8 characters are not yet supported in identifiers, but a universal-character-name should work. So I convert my source to:
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
So apparently ?? isn't a valid identifier character. However, the standard specifically allows characters from the range 10000-1FFFD
in Annex E.1 and doesn't disallow it as an initial character in E.2.
My next effort was to see if any other allowed Unicode characters worked - but none that I tried did. Not even the ever important PILE OF POO (??) character.
So, for the sake of meaningful and descriptive variable names, what gives? Does -fextended-identifiers
do as it advertises or not? Is it only supported in the very latest build? And what kind of support do other compilers have?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…