什么时候可以创建“保留”标识符?
Posted
技术标签:
【中文标题】什么时候可以创建“保留”标识符?【英文标题】:When is it okay to create 'reserved' identifiers? 【发布时间】:2020-04-15 08:17:04 【问题描述】:我认为学习和改进编程的最佳方法之一就是查看各种源代码。我正在查看 Blender 的源代码,并注意到一些关于头文件的内容。他们中的大多数使用#ifndef
包括守卫,其中宏被双下划线包围(例如__BMESH_CLASS_H__
)。
这让我开始思考,整个“不要做任何以下划线开头的东西”的建议对初学者都有好处,但我认为为了在编程中进一步进步,我应该在创建自己的保留时学习标识符合适和不合适。
【问题讨论】:
相关c:***.com/questions/17307540/… 对于 c++:***.com/questions/4867559/naming-include-guards 永远不合适,Blender 做错了。大多数代码在几个方面都存在形式上的错误,有时是因为“它可以工作,而且我不会被打扰”。 如果有人考虑在@molbdnilo 评论中做出回答但担心......我相信这不是基于意见的,我保证会投票。 【参考方案1】:我认为,为了在编程中取得进一步进展,我应该在创建自己的保留标识符时学习是和不合适的。
保留标识符为实现保留,大致意思是编译器、它的运行时库,也可能是操作系统的一部分。
因此,当您的进步导致您编写自己的编译器或操作系统时,创建自己的编译器或操作系统是合适的。差不多就这些了。
【讨论】:
【参考方案2】:据我所知,只有一种情况是允许自制的保留标识符。所有其他行为都被认为是未定义的行为,虽然它们很可能仍会完全一样地工作,但这违反了标准,不应该这样做。
也就是说,您可以在与开发环境的某些组件交互时创建保留标识符。例如,某些编译器可能支持__FILE_NAME__
之类的东西,而其他编译器可能不支持,甚至可能因编译器版本而异。如果您自己制作它是为了向后兼容(即添加预处理器定义来定义所述宏),那么它是 100% 可以的,只要它的实现遵循准确使用所述标识符的要求(例如它应替换为__FILE_NAME__
的文件名,而不是其他)。
【讨论】:
我不会在当前未定义__FILE_NAME__
的平台上定义它。我会有条件地将FILE_NAME
定义为__FILE_NAME__
(如果可用),否则将使用解决方法。以上是关于什么时候可以创建“保留”标识符?的主要内容,如果未能解决你的问题,请参考以下文章