gpt4 book ai didi

用 case 语句组成函数名的 C 宏

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

我想要一个根据其参数构造函数名称的宏,例如:

#define CASE1 1
#define CASE2 2
#define CASE3 3

#define MYFNAME(c, s1, s2) \
switch(c) \
{ case 1: s1 ## _case1_ ## s2; \
case 2: s1 ## _case2_ ## s2; \
case 3: s1 ## _case3_ ## s2; }

get_case1_val() { ... }
get_case2_val() { ... }
get_case3_val() { ... }

int main()
{
MYFNAME(1, get, val)(); // would call get_case1_val();
...
...
}

问题是,看起来宏附加了;在组合字符串的末尾,并将其预编译为:

get_case1_val;();

知道如何避免得到;在连接字符串的末尾?

谢谢

最佳答案

您的问题是您试图将 case 语句用作表达式。这在某些编程语言中是可能的,例如 Lisp 和 Rust,但在 C 中则不行。您可以改为编写如下内容

#define CALL_MYFNNAME(c, s1, s2, ...) do { \
switch(c) \
{ case 1: s1 ## _case1_ ## s2 (__VA_ARGS__); break; \
case 2: s1 ## _case2_ ## s2 (__VA_ARGS__); break; \
case 3: s1 ## _case3_ ## s2 (__VA_ARGS__); break; } } while (0)

将实际的函数调用放入开关中。我还做了一些其他小的更正。

关于用 case 语句组成函数名的 C 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45851736/

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