gpt4 book ai didi

c - C宏中的可变格式字符串?

转载 作者:行者123 更新时间:2023-12-05 04:21:12 25 4
gpt4 key购买 nike

我正在尝试编写一个像这样的基本宏:

#define USER_ERROR(fmt, ...) { \
fprintf(stderr, "ERROR %s(): %s\n", __func__, fmt, ##__VA_ARGS__); \
} \

我的理想用法:

USER_ERROR("something went wrong %s %s", more_detail, even_more_detail);

不幸的是,我遇到了一个编译错误:

data argument not used by format string

我知道单个 %s 处理一个参数,但我怎样才能使格式化程序可变?

最佳答案

您可以使用字符串常量连接将您的格式字符串与宏中的内置格式字符串组合起来:

#define USER_ERROR(fmt, ...) \
fprintf(stderr, "ERROR %s(): " fmt "\n", __func__, ##__VA_ARGS__);

int main()
{
char more_detail[]="abc", even_more_detail[]="def";
USER_ERROR("something went wrong %s %s", more_detail, even_more_detail);
return 0;
}

输出:

ERROR main(): something went wrong abc def

这也有确保您的格式字符串是字符串常量的副作用,因为格式字符串可能受用户控制会导致安全问题。

关于c - C宏中的可变格式字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74296438/

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