Макрос не является функцией, что означает, что у него нет адреса, поэтому вы не можете его назвать.
Макросы оцениваются препроцессором. Использование их просто приводит к простой замене текста, в результате они существуют только в исходном файле и нигде больше.
Однако, что вы можете сделать, это настроить функцию-оболочку для макроса и вызвать ее вместо этого. Например:
#define X(a, b, c) (a).foo = (b); \
(a).bar = (c)
void _X(struct foo *a, int b, int c)
{
X(*a, b, c);
}
Но это просто устраняет необходимость в макросе в первую очередь. Таким образом, вы можете также избавиться от макроса и использовать функцию.
макрос не является функцией – Alexguitar
вправо, но мой макрос инициализирует некоторые переданные ему переменные, как мне запустить этот инициализирующий макрос из сборки? – Alex
Макросы являются частью препроцессора ** C **. Ассемблер не C. Итак ... – Olaf