我想在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 :(得分: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.可执行文件