符号(@)和美元符号($)在C或C++中是否有任何特殊含义

For*_*ner 24 c c++ special-characters

最近我的一位朋友在接受采访时遇到了这个问题.面试官问他是否有特殊字符$, @, |, ^, ~在c或c ++中有任何使用方法.

我知道它们|, ^ and ~分别用作Bitwise OR,XOR和Complement.

但我不知道是否@ and $有任何特殊含义.如果有,请举例说明可以应用的地方吗?

dus*_*uff 27

@在C中通常无效; 它不用于任何东西.它被Objective-C用于各种目的,但这是另一个鱼的水壶.

$也是无效的,但许多实现允许它出现在标识符中,就像一个字母.(例如,在这些实现中,$$$如果您愿意,可以命名变量或函数.)即使在那里,它也没有任何特殊含义.

  • 请注意,@或$都不适用于运算符重载,尽管您可能会以某种方式使用预处理器宏执行恶意操作 (4认同)
  • 当然,如果一个实现决定不支持它,那么你的代码突然不起作用. (2认同)

Bil*_*low 9

要完成接受的答案,@可以使用它来指定嵌入式系统上变量的绝对地址.

unsigned char buf[128]@0x2000;
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个非标准的编译器扩展.

在这里查看一个很好的解释


124*_*123 6

完成其他答案.5.2.1.3中的C99标准:

基本源代码和基本执行字符集都应具有以下成员:

拉丁字母的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个图形字符

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

所有其他角色甚至可能都不存在.(不应该使用)

但共同扩展中也有这一点:附件J,J.5.2:

除了下划线_,字母和数字之外的不属于基本源字符集的字符(例如美元符号$或国家字符集中的字符)可能出现在标识符(6.4.2)中.

这基本上就是duskwuff已写的内容.