Я использую Visual Studio 2015 для изучения некоторых базовых C. Во время экспериментирования с символической константой EOF я решил найти ее определение, и вот что я нашел:
#define EOF (-1)
Я, хотя это было странно, что -1 был заключен в круглые скобки, поэтому я решил создать свою собственную -1-символическую константу, поэтому я сделал следующее:
#define ABC -1
В отладчике как EOF, так и ABC отображаются как значение -1, поэтому я начал задаваться вопросом, почему определение EOF использует (-1)
для представления -1
когда скобки не кажутся необходимыми?
Благодарю.
Всегда полезно, если не нужно, добавлять необходимые числа скобок в определенный макрос.
Например, если вы это сделаете
#define SUM(a,b) a + b #define MUL(a,b) a * b int a = MUL(4+5, 2+3); // you get 4+5*2+3 = 17 instead of 45. int b = 4 * SUM(1,1); // you get 4*1+1 = 5 instead of 8.
Так что лучше писать
#define SUM(a,b) ((a) + (b)) #define MUL(a,b) ((a) * (b))
И поскольку это хорошая привычка, всегда используйте ()
в макросах.
Еще одна веская причина – пример, показанный в комментариях к вашему вопросу.