Это не хороший вариант использования макроса.Это просто запутывает ваш код и добавляет некоторую сложность там, где это не нужно.Однако, если вы привержены этому, вам необходимо внести несколько изменений.
Во-первых, аргументы макроса не имеют типа:
#define HOURS_WORKED(hours_worked) printf("\nHours Worked: %d\n", hours_worked)
Во-вторых, когда вы вызываетемакрос, вам также необходимо предоставить аргумент:
HOURS_WORKED(hoursWorked);
Помните, что макросы, подобные функциям, не являются функциями - это просто текстовые замены.Макро аргументы не оцениваются, они просто раскрываются на месте.То есть, если вы вызовете HOURS_WORKED
как
HOURS_WORKED(n * 40);
, тогда он расширится до
printf("\nHours Worked: %d\n", n * 40)
Чтобы избежать проблем с приоритетами и синтаксическим анализом, часто хорошей идеей будет обернуть ваш аргумент макросав паранах:
#define HOURS_WORKED(hours_worked) printf("\nHours worked: %d\n", (hours_worked) );