Подтвердить что ты не робот

$ в имени переменной?

Я наткнулся на некоторый (С++) код, подобный этому:

int $T$S;

Сначала я подумал, что это какой-то код PHP или что-то неправильно вставленное там, но оно компилируется и работает хорошо (на MSVC 2008).

Какие символы действительны для переменных в С++ и существуют ли какие-либо другие странные символы, которые вы можете использовать?

4b9b3361

Ответ 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) и _ действителен для имен переменных в соответствии со стандартом (примечание: имя переменной не должно начинаться с числа, хотя).

Все остальные символы должны быть расширениями компилятора.