如何创建无效的#define?

时间:2017-10-27 15:05:04

标签: c++ preprocessor

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

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

例如,

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

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

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

这样定义是否安全,因此调用SYS_LOCK和SYS_UNLOCK什么都不做?

#define SYS_LOCK
#define SYS_UNLOCK

1 个答案:

答案 0 :(得分:3)

#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