C/C++ 中的“@”和“$”是啥? [复制]

Posted

技术标签:

【中文标题】C/C++ 中的“@”和“$”是啥? [复制]【英文标题】:What are the '@' and '$' for in C/C++? [duplicate]C/C++ 中的“@”和“$”是什么? [复制] 【发布时间】:2013-08-28 17:16:56 【问题描述】:

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

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

控制台输出:

$m = 2

但是,“@”符号在用作字符时会产生错误。 error: stray '@' in program 我认为这意味着它是用来做某事的? Wikipedia 和 MSDN 没有提到任何一个字符。 Google 为“符号”或“C”提供了大量匹配项。

【问题讨论】:

***.com/questions/7926394/in-variable-name @ 通常用于某些元目的。 【参考方案1】:

$@ 都不是标准 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

十进制数字

    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 实现允许这样的标识符。但是,一些目标机器不支持标识符中的美元符号,通常是因为目标汇编器不允许它们。

【讨论】:

以上是关于C/C++ 中的“@”和“$”是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python 中 switch/case 的语法等价物是啥? [复制]

为啥 % 运算符不能用于 C/C++ 中的浮点数但可以用于 Java 和 C#? [复制]

Subversion 中的主干、分支和标签是啥? [复制]

Python 中的 @ 和 lambda 是啥意思? [复制]

Swift 中的 === 和 !== 是啥?和 JS 中的一样吗? [复制]

c#中的行为抽象类和接口是啥? [复制]