gpt4 book ai didi

c - 在 C 语言的编译时评估的预处理器函数

转载 作者:太空狗 更新时间:2023-10-29 17:21:01 24 4
gpt4 key购买 nike

我想编写预处理器函数/数组,在编译时间。例如,如果我定义

#define MYARR[] {5,4,3,2,1,0}

然后是代码

int x = R[0];

应该呈现为

int x = 5;

给编译器。 (当然索引中只能使用文字)。如果代码大小/内存很重要并且我们不想存储 MYARR,但为了编码方便,我们需要它。

编译时函数也不错。例如,类似

#define MYMAP(n)
#if n==1
5
#else
2

所以,声明

int x = MYMAP(4);

应该呈现给编译器

int x = 2;

显然,我们必须使用文字作为参数。这可能吗?

最佳答案

当然有可能。虽然您可以手动执行此操作,但 Boost.Preprocessor已经为您提供了所需的工具:

#include <boost/preprocessor.hpp>
#define SEQ (5)(4)(3)(2)(1)(0)
int x = BOOST_PP_SEQ_ELEM(0, SEQ);

... 转换为:

int x = 5;

它还包括算术、比较和控制结构,如 IFFORFOR_EACH、枚举……你只需要保持请记住,您可以使用的数据类型相当有限。

再次使用 Boost.PP,您的第二个示例可以这样完成:

#define MYMAP(x) BOOST_PP_IF(BOOST_PP_EQUAL(x, 1), 5, 2)

您当然可以手动实现 Boost.PP 所做的事情,但考虑到为此所需的时间和精力,我个人不会打扰。

作为 C 用户,您不会对 Boost 的其余部分感兴趣,因此您可能想要使用 bcp提取预处理器组件。

关于c - 在 C 语言的编译时评估的预处理器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3791264/

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