gpt4 book ai didi

c - "Overloading"具有 `#define` 常量的宏

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

我正在尝试执行以下操作:

//Bad; can't redefine macros; uses later definition.
#define foo )
#define foo(arg) ,arg)

也就是说,我想要 foo (注意:不是宏函数)映射到一个东西,并且我想要宏函数 foo(arg) 映射到其他内容。因此 foo 需要是一些映射到 的 #define 常量(捕获两种情况)。 。 。东西。

<小时/>

我一直没能找到办法,(因为这是一个宏和一个常量,所以许多 previous questions 不适用)。 我该怎么做?

邪恶的编译器/平台特定选项也很棒。标记此对于 C 宏,尽管我使用的是 C++14。

<小时/>

旁注(根据要求):这可以用于例如为 new 制作您自己的调试重载,该重载也可以与新的放置一起使用:

#define new new(__FILE__,__LINE__ foo
//...
void const* p1 = new int();
void const* p2 = new (ptr) int();

最佳答案

您似乎正在寻找一个对函数(带参数)和类对象(纯#defines)宏具有不同 namespace 的预处理器 - 我不知道我不知道有任何这样的东西,而且我认为如果有的话,那会从根本上令人困惑。

我知道你想要类似的东西(注意这实际上并不是试图提供解决方案)

// NOTE: Example might work in some very trivial use cases
#ifdef DEBUG
#define new(x) new(x);lognew(__FILE__,__LINE__)
#define pnew(p,x) new (p) (x); lognew(__FILE__,__LINE__)
#else
#define new(x) new(x)
#define pnew(p,x) new(p) (x)
#endif

并且pnew和new应该使用相同的关键字。不,我认为这是不可能的(我很高兴它不可能;))。

关于c - "Overloading"具有 `#define` 常量的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35806244/

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