Последние пять #define
операторов, которые вы даете, определяют макросов , каждый из которых принимает аргумент , который здесь всегда называется c
. Ваши первые четыре оператора #define
, технически, также являются макросами, но они не нуждаются в аргументе - они просто заменяют их «значения», когда они встречаются;часто программисты ссылаются на макросы без аргументов как tokens , при этом токен PIPE
здесь имеет значение токена ('|')
.
Позже в файле (возможно) будетмогут быть случаи, когда вызывается один или несколько из этих макросов, и этот вызов будет иметь значение для фактического аргумента, например, вот так:
if (ispipe(test_arg)) ++npipes;
Этот макрос "вызов"будет заменен (препроцессором) следующим расширением:
if (((test) == ('|')) ++npipes;
И, аналогично, для других макросов #define XXX (c).
Примечание:Весьма распространено добавлять (много) скобок в определениях макросов, просто чтобы быть уверенным, что код делает то, что вы «думаете», после того, как препроцессор сделал свое дело.
Feelсвободно запрашивать дальнейшие объяснения и / или разъяснения.