c使用空字符串

时间:2016-02-02 05:59:34

标签: c macros concatenation token

我试图将宏用于c代码。 但是,我坚持使用令牌连接

我有以下变数。

A, aA, bA, cA ...

并且,所有这些变量都用于相同的函数(情况有点复杂,所以只传递变量是不够的。)

如果我只有

aA, bA, cA

然后,我可以使用下面的宏。

#define CALL_FUNCTION(GROUP) \
     FUNCTION(GROUP##A);

然而,因为

A

我不能再使用上面提到的宏了。 我试过了,

#define CALL_FUNCTION(GROUP) \
     FUNCTION(GROUP##A);

FUNCTION(NULL);    
FUNCTION(a);
FUNCTION(b);
FUNCTION(c);

但实际上,NULL不是空字符串,它没有用。

FUNCTION("");    

也没有工作。

还有替代方式,

#define CALL_FUNCTION(GROUP) \
    if(GROUP == NULL)\
        FUNCTION(A);\
    else\
        FUNCTION(GROUP##A);

然而,在这种情况下,我需要写几行。 就我而言,它会导致更多的代码。

我搜索了很多,但我无法解决问题。 有没有人知道如何用空字符串标记粘贴?

由于

2 个答案:

答案 0 :(得分:2)

传递一个空参数,它将有效地与A连接,只产生A

#define CALL_FUNCTION(GROUP) \
     FUNCTION(GROUP##A);

CALL_FUNCTION() // expands to FUNCTION(A);
CALL_FUNCTION(a) // expands to FUNCTION(aA);

你可以see this work live

需要注意的是,当你调用CALL_FUNCTION()时,你不会像处理函数一样传递零参数。相反,你传递一个参数 - 空。同样,MACRO(,)使用两个空参数调用MACRO。只是碰巧用空的串联行为就是你想要的。

答案 1 :(得分:1)

你只需要一个不带参数的第二个宏:

#define CALL_FUNCTION() \
     FUNCTION(A);

#define CALL_FUNCTION(GROUP) \
     FUNCTION(GROUP##A);

示例:

#include <stdio.h>

#define FUNCTION(x)           printf( # x "\n" )
#define CALL_FUNCTION()       FUNCTION(A)
#define CALL_FUNCTION(GROUP)  FUNCTION(GROUP##A)

int main(void) {
    CALL_FUNCTION();
    CALL_FUNCTION(a);
    CALL_FUNCTION(b);
    CALL_FUNCTION(c);
    return 0;
}

输出:

A
aA
bA
cA