gpt4 book ai didi

c - 如何连接、评估和字符串化宏?

转载 作者:太空宇宙 更新时间:2023-11-04 00:58:24 25 4
gpt4 key购买 nike

我正在尝试对宏连接的替换(求值)进行字符串化。例如:

#include <stdio.h>

#define FOO_ONE 12
#define FOO_TWO 34
#define BAR_ONE 56
#define BAR_TWO 78

#define MAKE_MAC(mac) // ... what to do here?

void main(int argc, char *argv[])
{
printf("FOO: " MAKE_MAC(FOO) "\n");
printf("BAR: " MAKE_MAC(BAR) "\n");
}

我要的结果是:

FOO: 1234
BAR: 5678

我尝试了几种形式,我认为最好的尝试是这样的:

#define STRINGIFY(mac) #mac
#define CONCAT(mac1, mac2) STRINGIFY(mac1 ## mac2)
#define MAKE_MAC(mac) CONCAT(mac, _ONE) CONCAT(mac, _TWO)

但是,它只让我走到这一步:

FOO: FOO_ONEFOO_TWO
BAR: BAR_ONEBAR_TWO

那么,在字符串化之前,如何添加额外的步骤来评估结果串联的宏?

最佳答案

试试这个:

#include <stdio.h>

#define FOO_ONE 12
#define FOO_TWO 34
#define BAR_ONE 56
#define BAR_TWO 78

#define STRINGIFY(arg) #arg
#define CONCAT(arg1, arg2) STRINGIFY(arg1) STRINGIFY(arg2)

#define MAC(arg) CONCAT(arg##_ONE, arg##_TWO)

int main(){

printf("FOO: " MAC(FOO) "\n");
printf("BAR: " MAC(BAR) "\n");

return 0;
}

我的输出:

FOO: 1234
BAR: 5678

关于c - 如何连接、评估和字符串化宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com