gpt4 book ai didi

C "#define"函数名生成

转载 作者:行者123 更新时间:2023-11-30 15:30:50 25 4
gpt4 key购买 nike

我有concrete_impl.h(按原样):

#ifdef TUPLE_ITERATOR_WITH_INDEX
#define TUPLE_ITERATOR TUPLE_ITERATOR_NO_INDEX
#define iterate_tuple_fname iterate_tuple_id
#else
#define TUPLE_ITERATOR TUPLE_ITERATOR_INDEX
#define iterate_tuple_fname iterate_tuple
#endif

#undef iterate_tuple_fname_back
#define iterate_tuple_fname_back iterate_tuple_fname##_back

static void iterate_tuple_fname() // ok
{
}

static void iterate_tuple_fname_back() // redefinition error
{
}

concrete.h(按原样):

#ifndef CONCRETE_H
#define CONCRETE_H

#define TUPLE_ITERATOR_WITH_INDEX
#include "concrete_impl.h"

#undef TUPLE_ITERATOR_WITH_INDEX
#include "concrete_impl.h"


#endif // CONCRETE_H

我想要得到的是 4 个函数:

  • 迭代元组
  • iterate_tuple_id
  • iterate_tuple_back
  • iterate_tuple_id_back

但是在“_back”函数上我遇到了重新定义错误。为什么?

最佳答案

iterate_tuple_fname##_back 只不过是 iterate_tuple_fname_back。要将 iterate_tuple_fname 替换为其宏替换列表,您需要一个辅助宏:

#define CONCAT(a, b) a ## b
#define iterate_tuple_fname_back CONCAT(iterate_tuple_fname, _back)

更新:抱歉,经过几年的 C# 编程,我已经完全忘记了 C。

它实际上需要双重通过辅助宏运行:

#define CONCAT1(a, b) a ## b
#define CONCAT(a, b) CONCAT1(a, b)
#define iterate_tuple_fname_back CONCAT(iterate_tuple_fname, _back)

关于C "#define"函数名生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25319560/

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