如何将函数的定义传递给其他函数,以便其他函数将其用C语言调用?

时间:2019-02-08 23:59:00

标签: c function c-preprocessor

我有一些#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 :(得分:1)

#define没有定义函数。它定义了macro

在程序文本被编译之前宏会被扩展。宏扩展通过用宏主体替换宏来修改程序文本。编译后的代码中没有任何内容与宏定义相对应。

您可以将函数作为参数传递(或更准确地说,可以将指针传递给函数)。但是这些功能实际上必须存在于可执行文件中。 (不一定在源代码中:完全可以使用指向库函数的指针。)由于不存在宏,因此不存在指向宏的指针之类的东西,并且它们不能在程序执行期间用于任何目的。