8

我从一个开源库中阅读了以下代码。令我困惑的是美元符号的使用。任何人都可以澄清代码中 $ 的含义。非常感谢您的帮助!

   __forceinline MutexActive( void ) : $lock(LOCK_IS_FREE) {}
    void lock  ( void );
    __forceinline void unlock( void ) { 
      __memory_barrier();     // compiler must not schedule loads and stores around this point
      $lock = LOCK_IS_FREE; 
    }
  protected:
    enum ${ LOCK_IS_FREE = 0, LOCK_IS_TAKEN = 1 };
    Atomic $lock;
4

4 回答 4

9

它被用作标识符的一部分。

[C++11: 2.11/1]标识符定义为“任意长的字母和数字序列”。它在上面给出的语法中定义了“字母和数字”,它只明确命名数字、小写和大写罗马字母以及下划线字符,但也允许“其他实现定义的字符”,其中大概是一个。

在这种情况下,$除了作为标识符的一部分之外没有特殊含义——在这种情况下,是变量的名称。它位于变量名的开头没有特殊意义。

于 2013-01-30T01:50:12.357 回答
9

有一个 gcc 开关,-fdollars-in-identifiers它明确允许在标识符中使用 $。

也许他们启用了它并将 $ 用作不太可能与正常名称发生冲突的东西。

-fdollars-in-identifiers

在标识符中接受 $。您还可以通过选项 -fno-dollars-in-identifiers 明确禁止使用 $。(GNU C 在大多数目标系统上默认允许 $,但也有一些例外。)传统 C 允许字符 $ 构成标识符的一部分。但是,ISO C 和 C++ 禁止在标识符中使用 $。

请参阅gcc 文档。希望链接保持良好。

于 2013-01-30T01:59:57.203 回答
0

即使美元符号根据标准不是有效的标识符,也可以被接受。例如visual studio(我也认为ggc,但我不确定)似乎接受它。

检查此文档: http: //msdn.microsoft.com/en-us/library/565w213d (v=vs.80).aspx 和这个:C++ 03 中的标识符中是否允许使用美元符号?

于 2013-01-30T01:49:20.640 回答
-1

C++ 标准说:

基本源字符集由 96 个字符组成:空格字符、表示水平制表符、垂直制表符、换页符和换行符的控制字符,以及以下 91 个图形字符:abcdefghijklmnopqrstu vwxyz ABC DEFGHIJKLMNOPQRSTUVWX YZ 0 1 2 3 4 5 6 7 8 9 _ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | != , \" '</p>

上面描述的基本源字符集中没有$;代码中的 $ 字符是基本源字符集的扩展,这不是必需的。考虑在英国,使用英镑符号(£ 或 ₤)代替美元符号 ($)。

于 2013-01-30T01:48:30.577 回答