【发布时间】:2021-06-28 00:58:02
【问题描述】:
我可以在网站上找到有关在宏内部使用 #if 和 #ifdef 的其他问题,以及绕过限制以实现各种目标的方法,但它们或它们的答案似乎都不符合我的用例,这对我来说似乎很明显:
// the system flags are defined as object-like macros in this header...
#include <sys/stat.h>
// naive attempt at function-like macro that of course cannot work
#define MAYBE_EXPORT_FLAG(flag) \
#if defined(flag). \
exports.Set(Napi::String::New(env, #flag), \
Napi::Number::New(env, flag)); \
#endif
Napi::Object Init(Napi::Env env, Napi::Object exports) {
MAYBE_EXPORT_FLAG(UF_NODUMP)
MAYBE_EXPORT_FLAG(UF_IMMUTABLE)
MAYBE_EXPORT_FLAG(UF_APPEND)
return exports;
}
例如,this previous question 看起来很相似,并且提供了一种解决方法,但我无法根据我的情况调整这组宏,或者如果它是可调整的,我不明白那里的某些东西。在任何情况下,它都不会在生成的代码中使用宏的参数。
我确实发现有一些技巧可以做其他一些问题想要的,但我找不到一种方法可以让它们中的任何一个适应这种情况。但它们非常棘手。那么有什么技巧还是根本不可能?
【问题讨论】:
-
直到 C++ 有反射,最终可能会出现,如果不明确定义自己的
#define标签,这是不切实际的。 -
@hippietrail 一个“预处理器符号”被称为宏。
标签: c++ macros c-preprocessor conditional-compilation