gpt4 book ai didi

c++ - 显式 C++ 宏扩展

转载 作者:行者123 更新时间:2023-11-30 01:17:01 26 4
gpt4 key购买 nike

我想让所有日志记录函数都包含文件和行,因此我需要一个宏。宏定义如下:

 inline void _internLogFunc(int line, const char* function, const char* data ...)
{...}

#define _InternLogParams(...) _internLogFunc(__LINE__, __FUNC__, __VA_ARGS__)

#define Log(...) _InternLogParams(__VA_ARGS__)

问题是当函数以下列方式被调用时:

 Log("[Version]: "
#if defined(_RELEASE)
"RELEASE "
#elif defined(_PROFILE)
"PROFILE "
#else
"DEBUG "
#endif

#if defined(PURE_CLIENT)
"PURE CLIENT"
#elif (DEDICATED_SERVER)
"DEDICATED SERVER"
#else
"DEVELOPMENT BUILD"
#endif
);

宏展开如下:

> _internLogFunc(950,  
> __FUNCTION__ ,
> "[Version]: "
> #if defined(_RELEASE) "RELEASE "
> #elif defined(_PROFILE) "PROFILE "
> #else "DEBUG "
> #endif
> #if defined(PURE_CLIENT) "PURE CLIENT"
> #elif (DEDICATED_SERVER) "DEDICATED SERVER"
> #else "DEVELOPMENT BUILD"
> #endif);

有谁知道如何让作为参数给出的宏首先展开?

最佳答案

只需将所有 #ifedf 放在函数调用之外,并使用它们来定义一些文字字符串。示例:

#ifdef _RELEASE 
#define VERSION "RELEASE"
#else
#define VERSION "DEBUG"
#endif

...

LOG(VERSION);

...

关于c++ - 显式 C++ 宏扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25461426/

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