Как передать определение функции другой функции, чтобы другая функция вызывала ее на языке Си? - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть несколько #define, которые определяют функции, и я хочу передать некоторое определение функции "ff", чтобы она вызывала ее, вот пример:

#define square(x) x*x
#define add(a,b) a+b
#define subtract(a,b,c) a-b-c
#include <stdio.h>

int ff(my_func)
{
    //do something useful
    my_func; //this should call square or add or subtract
    //do something useful
}

int main()
{
   printf("Square is %d \n",square(3)); //this works fine
   printf("Add is %d \n", add(7, 8)); //this works fine
   printf("Subtract is %d \n", subtract(21, 1, 8)); //this works fine

   ff(square(10)); //this doesn't work, or it can be ff(add(5, 5));

   return 0;
}

Это дажеможно это сделать?

1 Ответ

0 голосов
/ 09 февраля 2019

#define не определяет функцию.Он определяет макрос .

Макросы раскрываются до компиляции текста программы.Расширение макроса изменяет текст программы, заменяя макрос телом макроса.Ничто в скомпилированном коде не соответствует определению макроса.

Вы можете передавать функции в качестве аргументов (или, точнее, вы можете передавать указатели на функции).Но эти функции должны действительно существовать в исполняемом файле.(Не обязательно в исходном коде: указатели на библиотечные функции прекрасно работают.) Поскольку макросы не существуют, не существует такого понятия, как указатель на макрос, и их нельзя использовать для каких-либо целей во время выполнения программы.

...