我想使用#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/