$ в имени переменной? - PullRequest
       25

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

25 голосов
/ 28 октября 2011

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

int $T$S;

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

Какие символы допустимы для переменных в C ++, и есть ли другие странные символы, которые вы можете использовать?

Ответы [ 3 ]

29 голосов
/ 28 октября 2011

Единственными допустимыми символами согласно стандарту являются буквенно-цифровые и подчеркивание. Стандарт требует, чтобы все Unicode считает алфавитно приемлемым (но только как одиночный символы кодовой точки). На практике реализации предлагают расширения (то есть некоторые принимают $) и ограничения (большинство не принимают все необходимые символы Юникода). Если вы хотите, чтобы ваш код был переносимым, ограничить символы 26 безударными буквами, прописными или строчными, десять цифр и '_'.

13 голосов
/ 03 августа 2013

Я только что выполнил поиск и обнаружил, что он действителен только в VC, а не в стандарте C

Специфично для Microsoft

Только первые 2048 символов идентификаторов Microsoft C ++ являютсязначительное.Имена для пользовательских типов «декорированы» компилятором для сохранения информации о типах.Результирующее имя, включая информацию о типе, не может быть длиннее 2048 символов.(См. Декорированные имена для получения дополнительной информации.) Факторы, которые могут влиять на длину декорированного идентификатора:

  • Обозначает ли идентификатор объект определенного пользователем типа или тип, производный отопределяемый пользователем тип.

  • Независимо от того, обозначает ли идентификатор функцию или тип, производный от функции.

  • Число аргументов функции.

Знак доллара также является допустимым идентификатором в Visual C ++.

// 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

2 голосов
/ 28 октября 2011

Насколько мне известно, только буквы (заглавные и маленькие), цифры (0 до 9) и _ действительны для переменной имена в соответствии со стандартом (примечание: имя переменной не должно начинаться с цифры).

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

...