2

これは、ライブラリからの C コードのスニペットです。

typedef enum
{
/** 
  * @brief  SDIO specific error defines  
  */   
  SD_CMD_CRC_FAIL                    = (1), /*!< Command response received (but CRC check failed) */
  SD_DATA_CRC_FAIL                   = (2), /*!< Data bock sent/received (CRC check Failed) */
  SD_CMD_RSP_TIMEOUT                 = (3), /*!< Command response timeout */
  SD_DATA_TIMEOUT                    = (4), /*!< Data time out */

、、、、の周り1のかっこの意味がわかりません。と同等ですか?234SD_CMD_CRC_FAIL = 1SD_CMD_CRC_FAIL = (1)

4

3 に答える 3

4

はい、同等です。

なぜ作者がそのように書くことを選んだのか分かりません(いくつかの理論についてはこの回答へのコメントを参照してください)。

于 2012-04-18T17:37:06.087 に答える
3

単一の値を囲む角かっこはオプションであり、隠された魔法はありません。それが何らかの関数呼び出しの一部ではないかどうか(つまり、パラメーターの区切り)を(1)評価するだけです。1

これは数学のようなもので、。などの式の意味を変更せずに、いくつかのレベルの角かっこを追加できますx = ((5) + (3))

于 2012-04-18T17:39:26.120 に答える
1

この特定のケースでは括弧で違いはありませんが、常にマクロ式を一対の括弧で囲むことをお勧めします。コードの作成者はおそらくマクロ定義を に変換しenum、括弧は古いコードの残り物として残っていました。


余談ですが、このルールの理由は次のとおりです。次のコードを検討してください。

#define FOUR 2 + 2
...
int x = 2 * FOUR;

最後の行はプリプロセッサによって変換され、int x = 2 * 2 + 2;予想どおり 8 ではなく 6 に評価されます。FOURが括弧で囲まれて定義されている場合、これは発生しません。

#define FOUR (2 + 2)
于 2012-04-18T17:59:40.820 に答える