C / C ++中的'@'和'$'是什么?

时间:2013-08-28 17:16:57

标签: c++ c

到目前为止,在MinGW中,'$'似乎只是一个基本字符(如'a'),可用于名称(变量,函数等)但它看起来不像一个。是否有一些隐藏的功能使用'$'作为我失踪的名字的一部分?

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

控制台输出:

$m = 2

但是,'@'符号在用作字符时会产生错误。 error: stray '@' in program我认为这意味着它用于什么? WikipediaMSDN并未提及任何一个字符。 Google为“符号”或“C”提供了大量匹配。

1 个答案:

答案 0 :(得分: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个图形字符:< / p>

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实现允许这样的标识符。但是,少数目标计算机不支持标识符中的美元符号,通常是因为目标汇编程序不允许这样做。