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

时间:2014-02-08 23:22:01

标签: c macros function-pointers

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

我有这些宏:

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

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

int just_a_function(int x, MACRO_AS_PARAMATER_HERE);

然后我想把这个函数称为:

just_a_function(10, SUM);

有可能吗?

由于

5 个答案:

答案 0 :(得分:9)

你不能作为函数参数传递。

但如果函数是宏,那么这是可能的。

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

答案 1 :(得分:3)

你不能这样做。

改为使用普通功能:

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

//...

just_another_function(10, sum);

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

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

答案 2 :(得分:0)

嗨,你传递的是宏意味着它代替你的传球。想一想.. 例如:#define HIGH 1 在函数中,您可以使用int变量。所以你可以将1传递给函数。在函数中,它存储为整数变量

答案 3 :(得分:0)

预处理器指令首先工作。一旦进入主宏被替换意味着在函数中你必须要处理替换。如果我会使用Macro High 1 ,,在函数中我会将int作为参数来获取本地函数堆栈。为了更好地理解,请检查主题1.preprocessor指令2.编译后如何创建hex文件

答案 4 :(得分:0)

#include<stdio.h>
#define HIGH 1
#define LOW 0
void pin(int,int);
void pin(int a, int b)
{
printf("A: %d B: %d\n",a,b);
}
int main()
{
pin(1,HIGH);
return 0;
}

编译步骤涉及 预处理器指令 2.编译器 3.链接器 4.可执行文件