加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 是否有某些关键字不应由我“#defined”?

发布时间:2020-12-16 03:43:31 所属栏目:百科 来源:网络整理
导读:我正在为C/C++中的应用程序开发一个平台层. 我想要 #define WINDOWS //在Windows机器上 #define ANDROID //在Android手机上 由于与其他库的冲突而定义非常常见的关键字如“WINDOWS”或“ANDROID”是不是一个坏主意,并且为这些关键字添加前缀是否有意义: #de
我正在为C/C++中的应用程序开发一个平台层.

我想要

#define WINDOWS //在Windows机器上

#define ANDROID //在Android手机上

由于与其他库的冲突而定义非常常见的关键字如“WINDOWS”或“ANDROID”是不是一个坏主意,并且为这些关键字添加前缀是否有意义:

#define MYLIB_WINDOWS //未被任何其他第三方库使用

#define MYLIB_ANDROID

解决方法

I would like to

注意在库的头文件中公开带有“常用”名称的宏.

还要注意私有代码中通常命名的宏 – 特别是如果#includes(直接或间接)其他库的头文件.

你不能依赖所有图书馆维护者都像你一样表现良好的希望.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读