我正在用 C/C++ 为我的应用程序开发一个平台层。
我愿意
#define WINDOWS//在 Windows 机器上
#define ANDROID//在 Android 手机上
由于与其他库的冲突,定义诸如“WINDOWS”或“ANDROID”之类的非常常见的关键字是不是一个坏主意,是否可以在这些关键字前加一些前缀:
#define MYLIB_WINDOWS//不被任何其他 3rdparty 库使用
#define MYLIB_ANDROID
最佳答案
I would like to
当心在你的库的头文件中公开带有“通用”名称的宏。
还要注意私有(private)代码中通常命名的宏 - 特别是如果它#include
(直接或间接)其他库的 header 。
您不能指望所有库维护者都像您一样守规矩。
and would it make sense to prefix these keywords with something:
一般来说,是的。
一个很好的例子是 BOOST 库套件。 BOOST 非常注意确保其头文件导出的所有宏都具有前缀 BOOST_
。前缀与 boost::
库的命名空间名称相匹配并非巧合。
总而言之,如果您的库是在命名空间中实现的(它应该是,否则您会污染全局命名空间),请务必使用与之匹配的宏前缀。
例子:
namespace mylib { namespace innerthing { }}
#define MYLIB_ON 1
#define MYLIB_OFF 0
#define MYLIB_SETTING MYLIB_ON
#define MYLIB_INNERTHING_SETTING MYLIB_OFF
关于c++ - 是否有某些关键字不应该是我的 "#defined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51221991/