C:有没有一种方法可以定义宏并在单个语句中输出一些代码?

时间:2020-10-12 11:15:12

标签: c-preprocessor

我想定义一个宏,该宏将为我生成程序文本并设置一些非字符串宏值。我知道将#define包含在另一个#define中是行不通的,所以我正在尝试寻找另一种方法。

一个简单的例子:

#include <stdio.h>

#define START_SYNTHETIC int SYNTHETIC_FUNCTION() {
#define END_SYNTHETIC return 0;}


#define SYNTHETIC_FUNCTION my_function

START_SYNTHETIC
    printf("Hello from %s", "SYNTHETIC_FUNCTION");
END_SYNTHETIC


int main() {
    my_function();
}

此代码有点用,它会产生以下输出:

Hello from SYNTHETIC_FUNCTION

它有两个问题:

  1. 函数名称未扩展,我在输出中仅显示“ SYNTHETIC_FUNCTION”。目前这并不重要,但以后可能需要。

  2. 我不喜欢使用三行来启动我的综合功能。自动格式化程序插入的空行特别令人讨厌。我可以将其简化为单个宏调用吗?

1 个答案:

答案 0 :(得分:1)

有没有一种方法可以定义宏并在单个语句中输出一些代码?

否,在C宏中无法定义其他宏。

函数名称未扩展,输出中只有“ SYNTHETIC_FUNCTION”。

确定不是-它位于字符串文字中。宏替换不是在字符串文字内完成的。

我可以将其简化为单个宏调用吗?

我不理解所有这些代码的意义。只是use __func__

int my_function(void) {
    printf("Hello from %s\n", __func__);
    return 0;
}

或将名称作为宏参数传递

#define SYNTHETIC(name) \
int name(void) { \
    printf("Hello from %s\n", #name); \
    printf("but really, just use __func__ anyway...: %s\n", __func__); \
    return 0; \
}

SYNTHETIC(my_function)