gpt4 book ai didi

c - 在 C 中编写宏时,如何找到参数的类型和 printf 说明符?

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

我想使用宏扩展 minunit 以使其更有用。

#define mu_assert_equal(actual, expected) do {                                            \
if (actual != expected) { \
char *message = malloc(MAX_ERROR_MESSAGE_LENGTH); \
if (message == NULL) { printf("malloc failed"); exit(1); } \
snprintf(message, MAX_ERROR_MESSAGE_LENGTH, "required: %s != %s, reality: %s == %lu", \
#actual, #expected, #actual, actual); \
return message; \
} \
} while (0)

调用:

mu_assert_equal(bytes_parsed, 1);

但上面的宏仅适用于无符号长值。

如何找到宏参数的类型,更重要的是,它们的 printf 说明符。

最佳答案

你不能,在 C11 之前的 C 中(添加 generics )。

在 C 中无法计算表达式的类型,而这正是您需要做的。如果可能的话,printf() 一开始就不需要 或多或少地具有静态说明符。

关于c - 在 C 中编写宏时,如何找到参数的类型和 printf 说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27980354/

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