Скобки делают в C / Embedded C #define заявления - PullRequest
1 голос
/ 17 января 2020

Я видел следующее в .h-файле для mc cc2640:

#define ADC_STATUS_SUCCESS         (0)

Насколько я знаю, C, компилятору приказано помещать значение ADC_STATUS_SUCCESS везде, где это происходит, то есть (0). Но какая разница в том, чтобы поставить только 0?

1 Ответ

2 голосов
/ 17 января 2020

в чем разница: 0?

Нет, , если вы не пишете сумасшедший код . Обычно для макросов, содержащих выражения, используются круглые скобки, чтобы избежать непредвиденных ошибок, связанных с приоритетом операторов и подобными вещами при их использовании. Однако в этом случае определение чего-либо как 0 или как (0) одинаково, если оно используется в выражениях.

Что я подразумеваю под «сумасшедшим кодом»? Ну, единственное различие между ними можно увидеть в следующем:

void func(int x) { /* ... */ };

#define ADC_STATUS_SUCCESS 0
func ADC_STATUS_SUCCESS;       // INVALID

#define ADC_STATUS_SUCCESS (0)
func ADC_STATUS_SUCCESS;       // VALID (for the love of God NEVER do this)

Я очень сомневаюсь, что это так, хотя никто в здравом уме не написал бы такую ​​мерзость. Это определение, скорее всего, по привычке.

...