код вы вывесили кажется ошибочным:
#define setId(ptr, name) ((ptr)->id = (id), 0)
Макрос setId
должен, вероятно, использовать аргумент name
вместо некоторого локального идентификатора id
. Если name
является целым числом, оно может быть таким:
#define setId(ptr, name) ((ptr)->id = (name), 0)
В противном случае, это может быть что-то вроде этого:
#define setId(ptr, name) ((ptr)->id = nameToId(name), 0)
Что касается , 0)
части, это экземпляр оператора запятая: макро расширяется до выражения, которое оценивает присвоение, а затем оценивает 0
. В случае, если используется результат setId(ptr, name)
, его значение будет всегда 0
. Конструкция, подобная этой, не очень читаема и, вероятно, будет генерировать предупреждения для некоторых компиляторов.
'' 'является оператором запятой. –
Вы переключали 'имя' и' id' при расшифровке кода? 'name' не используется в расширении макроса. 'id', который используется в расширении макроса, не является одним из параметров макроса. –
кажется сложным .. может кто-нибудь подумать о сценарии, где это полезно? –