Пожалуйста, примите это как пример расширения ответа какого-то чувака-программиста.
С вашими определениями этот фрагмент кода ...
INC1(10)
INC2(20)
INC3(30)
INC4(40)
будет расширен до .. .
((10)+1)
(a) ((a)+1)(20)
(( 30 ) + 1)
( a ) (( a ) + 1)(40)
Думаю, теперь возникает вопрос: «Почему наличие пробелов так важно?» Ответ на этот вопрос содержательно подразумевается в комментарии Groo (я надеюсь, что они позволят мне использовать и уточнить здесь).
Предположим, вы действительно хотите, чтобы макрос был расширен до что-то вроде ( a ) (( a ) + 1)
. Как бы вы это сделали, если бы эти два определения обрабатывались одинаково?
#define INC1(a) ((a)+1)
#define INC2 (a) ((a)+1)
И были бы расширены до
((10)+1)
((20)+1)
Разница между
INC(x) ...
INC (x) ...
дает это возможно интуитивно. Как только вы узнаете о проблеме.