我正在为C/C++应用程序开发平台层。

我想
#define WINDOWS // on Windows machines#define ANDROID // on Android phones
是否由于与其他库冲突而定义非常常见的关键字(例如“WINDOWS”或“ANDROID”)是一个坏主意,并且为这些关键字加上一些前缀是否有意义:
#define MYLIB_WINDOWS // Not used by any other 3rdparty libraries#define MYLIB_ANDROID

最佳答案



当心在库的头文件中公开带有“通用”名称的宏。

还应注意私有(private)代码中的通用宏,尤其是如果它是#include(直接或间接)其他库的头文件时,则尤其要注意。

您不能指望所有图书馆维护者的行为都与您一样良好。



一般来说,是的。

BOOST库套件就是一个很好的例子。 BOOST非常注意确保其头文件导出的所有宏都具有前缀BOOST_。前缀与库的 namespace 名称boost::相匹配并非偶然。

总而言之,如果您的库是在 namespace 中实现的(应该如此),否则您将污染全局 namespace ,请使用与之匹配的宏前缀。

例子:

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/

10-15 04:33