2013-08-28 2 views
4

До сих пор в MinGW «$» кажется просто базовым символом (например, «a»), который может использоваться в именах (переменных, функциях и т. Д.). Но это не похоже на одно. Есть ли скрытая функция использования '$' в качестве части имени, которое мне не хватает?

int $m = 2; 
printf("$m = %i", $m); 

Консоль вывода:

$m = 2 

Однако '@' символ выдает ошибку при использовании в качестве символа. error: stray '@' in program Я предполагаю, что это означает, что он используется для чего-то? Wikipedia, и MSDN не упоминает ни символ. И Google дает много матчей для «символа» или «С».

+1

http://stackoverflow.com/questions/7926394/in-variable-name –

+0

@ обычно для некоторых целей мета. – chris

ответ

8

Ни $ или @ являются частью набора символов стандартного языка C (C11 5.2.1 Наборы символов, пункт 3):

Как основной источник и основные наборы символов исполнения должны иметь следующие элементы: в 26 прописных букв латинского алфавит

A B C D E F G H I J K L M 
    N O P Q R S T U V W X Y Z 

из 26 строчных букв латинского алфавита

a b c d e f g h i j k l m 
    n o p q r s t u v w x y z 

в 10 десятичных цифры

0 1 2 3 4 5 6 7 8 9 

следующие 29 графических символов

! " # % & ' () * + , - ./: 
    ; <=> ? [ \ ]^_ { | } ~ 

символ пробела, и управляющие символы, представляющие горизонтальную вкладку, вкладка вертикальной , и подавать форму.

стандарт

C++ говорит о том же самом (2.2 Наборы символов, пункт 1):

основным источником набора символов состоит из 96 символов: символ пробела, управляющие символы, представляющие горизонтальная табуляция, вертикальная табуляция, форма подачи, а также новые линии, а также следующие графические символы 91:

a b c d e f g h i j k l m n o p q r s t u v w x y z 
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
0 1 2 3 4 5 6 7 8 9 
_ { } [ ] # () < > % : ; . ? * + -/^ & | ∼ ! = , \ " ’ 

Поэтому, если вы можете или не можете использовать их (вообще или даже для определенной цели), это зависит от вашей реализации.

В вашем случае это звучит, как вы, вероятно, с помощью GCC, который позволяет $ в идентификаторах как расширение, но не позволяет @ - вероятно, потому, что GCC также компилирует код Objective-C, где @ имеет особое значение.

От GCC documentation:

В GNU C, вы можете нормально использовать долларовые знаки в именах идентификаторов.Это связано с тем, что многие традиционные реализации C допускают такие идентификаторы. Однако знаки доллара в идентификаторах не поддерживаются на нескольких целевых компьютерах, как правило, потому что целевой ассемблер не позволяет их.