How to pass a macro as an argument in a C function?

You can't pass as function argument.

But if function is a macro this is possible.

#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;
}

You can't do that.

Use normal functions instead:

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

//...

just_another_function(10, sum);

Note: just_another_function must accept int (*)(int, int) as the second argument.

typedef int (*TwoArgsFunction)(int, int);
int just_another_function(int x, TwoArgsFunction fun);