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]識別子を「任意の長さの文字と数字のシーケンス」として定義します。すぐ上に示した文法で「文字と数字」を定義します。これは、数字、小文字と大文字のローマ字、およびアンダースコア文字のみを明示的に指定しますが、「その他の実装定義文字」も許可します。おそらく1つです。

このシナリオで$は、は識別子の一部として以外に特別な意味はありません。この場合は、変数の名前です。変数名の先頭にあることに特別な意味はありません。

于 2013-01-30T01:50:12.357 に答える
9

-fdollars-in-identifiersidenfitiersで$を明示的に許可するgccスイッチがあります。

おそらく彼らはそれを有効にし、通常の名前と衝突する可能性が非常に低いものとして$を使用します。

-fdollars-in-identifiers

識別子に$を受け入れます。オプション-fno-dollars-in-identifiersを使用して、$の使用を明示的に禁止することもできます。(GNU Cは、ほとんどのターゲットシステムでデフォルトで$を許可しますが、いくつかの例外があります。)従来のCでは、文字$が識別子の一部を形成することが許可されていました。ただし、ISOCおよびC++では、識別子に$を使用することは禁止されています。

gccのドキュメントを参照してください。うまくいけば、リンクは良好なままです。

于 2013-01-30T01:59:57.203 に答える
0

ドル記号が標準に従って有効な識別子でなくても、受け入れることができます。たとえば、ビジュアルスタジオ(ggcもそうだと思いますが、それについてはよくわかりません)はそれを受け入れているようです。

このドキュメントを確認してください:http://msdn.microsoft.com/en-us/library/565w213d (v = vs.80).aspx およびこれ:C ++ 03の識別子でドル記号を使用できますか?

于 2013-01-30T01:49:20.640 に答える
-1

C++標準は次のように述べています。

基本的なソース文字セットは、スペース文字、水平タブ、垂直タブ、フォームフィード、改行を表す制御文字、および次の91文字のグラフィック文字で構成されます。abcdefghijklmnopqrstuvwxyz ABC DEFGHIJKLMNOPQRSTUVWX YZ 0 1 2 3 4 5 6 7 8 9 _ {} []#()<>%:; 。?* +-/ ^&| !=、\ "'</ p>

上記の基本的なソース文字セットには$はありません。コード内の$文字は、基本的なソース文字セットの拡張であり、必須ではありません。英国では、ドル記号($)の代わりにポンド記号(£または₤)が使用されているとします。

于 2013-01-30T01:48:30.577 に答える