2014-02-08 159 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.可執行文件

相關問題