使用宏来泛化函数调用的代码

时间:2015-03-11 08:55:36

标签: c embedded c-preprocessor compile-time

我正在编写C代码,这需要我使用相同定义的多个函数调用,这些函数调用仅由单个字符区分。有没有办法我可以创建一个宏函数,它可以说一个数字,并且可以将这些调用插入到我的代码中,在那里我调用宏,因为我知道编译时的数字:

#define call_pin_macro(X)
    enable_pin#X();
    do_thing_pin#X();
    do_other_thing_pin#X();
            .
            .
void pin_function(void){
    call_pin_macro(1);
    call_pin_macro(2);
    call_pin_macro(3);
}

而不是:

void pin_function(void){
     enable_pin1();
     do_thing_pin1();
     do_other_thing_pin1();
     enable_pin2();
     do_thing_pin2();
     do_other_thing_pin2();
     enable_pin3();
     do_thing_pin3();
     do_other_thing_pin3();

}

作为一个注释,我在gcc中查看了字符串化(因此包含了#X' s)但是我无法获得上面的代码来编译,我收到错误"错误:'#& #39;后面没有宏参数"。因此,它似乎并不完全是我追求的功能。提前致谢。

1 个答案:

答案 0 :(得分:2)

在gcc中你可以这样做:

#define call_pin_macro(X)   \
    enable_pin##X();           \
    do_thing_pin##X();         \
    do_other_thing_pin##X();

双重哈希是macro concatenation运算符。你不想使用stringify,因为它会在它周围加上引号。

反斜杠允许您通过多行继续宏。