2014-02-08 108 views
2

我想在C函数中传递一个宏作为参数,我不知道它是否可能。 我想看到这样的操作,例如:如何在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); 

是否有可能?

谢谢

+0

请不要这样做。 – 2014-02-08 23:23:52

+6

宏被*解析/编译为C代码* – user2864740

+2

您可以将它传递给宏函数。 – this

回答

3

你不能那样做。

使用正常功能,而不是:

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

//... 

just_another_function(10, sum); 

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

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

谢谢你的例子和答案。 –

7

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

但是,如果函数是一个宏,这是可能的。

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

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

0

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

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

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

相关问题