$ в имени переменной?
Я наткнулся на некоторый (С++) код, подобный этому:
int $T$S;
Сначала я подумал, что это какой-то код PHP или что-то неправильно вставленное там, но оно компилируется и работает хорошо (на MSVC 2008).
Какие символы действительны для переменных в С++ и существуют ли какие-либо другие странные символы, которые вы можете использовать?
Ответы
Ответ 1
Единственными юридическими символами в соответствии со стандартом являются буквенно-цифровые символы
и подчеркивание. Стандарт требует, чтобы практически все
Unicode считает, что алфавитный признак (но только как единый
кодовые символы). На практике реализации предлагают расширения
(т.е. некоторые действительно принимают $) и ограничения (большинство из них не принимают все
требуемые символы Юникода). Если вы хотите, чтобы ваш код был портативным,
ограничивать символы 26 несогласованными буквами, верхним или нижним регистром,
десять цифр и "_".
Ответ 2
Я только что выполнил поиск и обнаружил, что это допустимо только в VC, а не в стандарте C
Спецификация Microsoft
Значимы только первые 2048 символов идентификаторов Microsoft С++. Имена пользовательских типов "украшены" компилятором для сохранения информации о типе. Полученное имя, включая информацию о типе, не может превышать 2048 символов. (Более подробную информацию см. В разделе "Украшенные имена".) Факторы, которые могут влиять на длину оформленного идентификатора:
-
Указывает ли идентификатор объект определенного пользователем типа или тип, полученный из определенного пользователем типа.
-
Указывает ли идентификатор функцию или тип, производные от функции.
-
Число аргументов функции.
Знак доллара также является допустимым идентификатором в Visual С++.
// dollar_sign_identifier.cpp
struct $Y1$ {
void $Test$() {}
};
int main() {
$Y1$ $x$;
$x$.$Test$();
}
https://msdn.microsoft.com/en-us/library/partnercenter/565w213d(v=vs.90).aspx
http://msdn.microsoft.com/en-us/library/565w213d.aspx
Изменить: gcc также поддерживает это расширение
6.34 Долларовые знаки в именах идентификаторов
В GNU C вы обычно можете использовать знаки доллара в именах идентификаторов. Это связано с тем, что многие традиционные реализации C допускают такие идентификаторы. Однако знаки доллара в идентификаторах не поддерживаются на нескольких целевых компьютерах, как правило, потому что целевой ассемблер не позволяет их.
http://gcc.gnu.org/onlinedocs/gcc/Dollar-Signs.html#Dollar-Signs
Ответ 3
Насколько мне известно, буквы (капитальные и малые), числа (0
до 9
) и _
действителен для имен переменных в соответствии со стандартом (примечание: имя переменной не должно начинаться с числа, хотя).
Все остальные символы должны быть расширениями компилятора.