如何将宏作为参数传递给C函数?

And*_*iel 4 c macros function-pointers

我想在宏函数中传递宏作为参数,我不知道是否可能.我想看看这个操作,例如:

我有这些宏:

#define PRODUCT(A, B) ((A) * (B)) 
#define SUM(A, B) ((A) + (B))
Run Code Online (Sandbox Code Playgroud)

然后我有以下签名的此功能:

int just_a_function(int x, MACRO_AS_PARAMATER_HERE);
Run Code Online (Sandbox Code Playgroud)

然后我想调用这个函数,如:

just_a_function(10, SUM);
Run Code Online (Sandbox Code Playgroud)

可能吗?

谢谢

Den*_*ira 11

你不能传递函数参数.

但如果函数是宏,这是可能的.

#include <stdio.h>

#define PRODUCT(A, B) ((A) * (B)) 
#define SUM(A, B) ((A) + (B))
#define JUST_A_FUNCTION(A, B, MACRO) MACRO(A, B)

int main() {
        int value;

        value = JUST_A_FUNCTION(10, 10, SUM);
        printf("%d\n", value);

        value = JUST_A_FUNCTION(10, 10, PRODUCT);
        printf("%d\n", value);

        return 0;
}
Run Code Online (Sandbox Code Playgroud)


mil*_*bug 4

你不能那样做。

使用普通函数代替:

int sum(int x, int y)
{
    return x+y;
}

//...

just_another_function(10, sum);
Run Code Online (Sandbox Code Playgroud)

注意:just_another_function必须接受int (*)(int, int)作为第二个参数。

typedef int (*TwoArgsFunction)(int, int);
int just_another_function(int x, TwoArgsFunction fun);
Run Code Online (Sandbox Code Playgroud)