我有一些#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;
}
是否有可能这样做?
答案 0 :(得分:1)
#define
没有定义函数。它定义了macro。
在程序文本被编译之前宏会被扩展。宏扩展通过用宏主体替换宏来修改程序文本。编译后的代码中没有任何内容与宏定义相对应。
您可以将函数作为参数传递(或更准确地说,可以将指针传递给函数)。但是这些功能实际上必须存在于可执行文件中。 (不一定在源代码中:完全可以使用指向库函数的指针。)由于不存在宏,因此不存在指向宏的指针之类的东西,并且它们不能在程序执行期间用于任何目的。