c++ - 如何创建不执行任何操作的#define?

标签 c++ preprocessor

我想使用#define 来锁定/解锁互斥体。但在我只使用单线程的其他平台上,我想禁用锁定和解锁并且不执行任何操作。

在这种情况下,如何在我不使用该功能的应用上安全地定义它?

例如,

#define SYS_LOCK sys_lock();
#define SYS_UNLOCK sys_unlock();

这就是我在支持多线程的平台中使用的。

但我想在其他平台上禁用它。

这样定义是否安全,因此调用 SYS_LOCK 和 SYS_UNLOCK 不会执行任何操作?

#define SYS_LOCK
#define SYS_UNLOCK

最佳答案

#define 只是声明该名称存在于预处理器中。 空#define的概念不仅无害,甚至被广泛使用,只是因为您可以测试宏是否已定义而不关心其含义。

它主要用于启用或禁用导入文件中的某些功能。来自 pylon API 的简单示例(我碰巧正在使用):

#   if defined(_WIN32) && !defined(_WIN64)
#       define PYLON_32_BUILD
#   elif defined(_WIN32) && defined(_WIN64)
#       define PYLON_64_BUILD
#   else
#       error unsupported wordsize (32/64 platform)
#   endif

此语句将决定是否包含 32 位或 64 位版本的 API

关于c++ - 如何创建不执行任何操作的#define?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46978124/

相关文章:

c++ - MFC C++ 语言资源 DLL - 仅覆盖某些对话框

c++ - 带有指针 vector 的 SWIG 和 C++ 内存泄漏

C++ 在构造函数中通过引用传递对象和复制构造函数混淆

assembly - %assign 和 %define 的区别

android - Android.mk 中的预处理器宏被忽略,但在 Application.mk 中有效

c - .config 文件中定义的预处理器宏在 c 文件中不可见

c++ - 是否为派生类生成移动构造函数/赋值运算符

c++ - 在调用者的堆栈上分配内存

c++ - 如何将字符串作为预处理器 token 传递?

java - 是否可以在 Java 中#define 一个类?