gpt4 book ai didi

C 宏参数 'storage'

转载 作者:太空狗 更新时间:2023-10-29 14:54:32 24 4
gpt4 key购买 nike

给定:

#define f(x, y) (x+y)
#define g(x, y) (x*y)
#define A 1, 2
#define B 2, 3

int main() {
int a = f(A);
int b = g(A);
int c = f(B);
int d = g(B);
}

这是行不通的,

我怎样才能让它发挥作用?基本思想是,我有一个参数列表,我想将其传递给两个不同的宏,而不是每次都重复长参数列表。

有没有办法做到这一点? 【欢迎修改f&g;甚至欢迎您修改 A 和我调用宏的方式。唯一的要求是:1) arguemnt 列表只能出现一次2) 它不能硬编码......这样我就可以用不同的参数调用宏

如果您的解决方案不太有效,但“几乎有效”(对于您对几乎的定义),我也想听听,也许我可以捏造它起作用。

谢谢!

编辑:f & g 必须是宏。他们捕获符号名称并对其进行操作。

最佳答案

你可以这样做:

static int f(int x, int y) { return (x+y); }
static int g(int x, int y) { return (x*y); }
#define A 1, 2
#define B 2, 3

如果您使用的是支持非标准 inline 指令的 C 编译器,则可以消除函数调用的开销。如果您使用的是 C++,

template<T> T f(T x, T y) { return (x+y); }
template<T> t g(T x, T y) { return (x*y); }
#define A 1, 2
#define B 2, 3

这与您预期的 C 宏解决方案大致相同。

如果 fg 必须 是宏,则 C 预处理器无法将多个参数传递给宏出现在调用站点的实际逗号。为此,您必须在 C 预处理器之上添加预处理器级别。

关于C 宏参数 'storage',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2303919/

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