如何创建什么都不做的#define?
How to create #define that does nothing?
我想为 locking/unlocking 互斥体使用#define。但是在我只使用单线程的其他平台上,我想禁用锁定和解锁并且什么都不做。
在这种情况下,如何在我不使用该功能的应用程序上安全地定义它?
例如,
#define SYS_LOCK sys_lock();
#define SYS_UNLOCK sys_unlock();
这是我在支持多线程的平台上使用的
但我想在其他平台上禁用它。
这样定义安全吗,所以调用 SYS_LOCK 和 SYS_UNLOCK 什么都不做?
#define SYS_LOCK
#define SYS_UNLOCK
#define
只是向预处理器声明此名称存在。
empty #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
我想为 locking/unlocking 互斥体使用#define。但是在我只使用单线程的其他平台上,我想禁用锁定和解锁并且什么都不做。
在这种情况下,如何在我不使用该功能的应用程序上安全地定义它?
例如,
#define SYS_LOCK sys_lock();
#define SYS_UNLOCK sys_unlock();
这是我在支持多线程的平台上使用的
但我想在其他平台上禁用它。
这样定义安全吗,所以调用 SYS_LOCK 和 SYS_UNLOCK 什么都不做?
#define SYS_LOCK
#define SYS_UNLOCK
#define
只是向预处理器声明此名称存在。
empty #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