什么时候可以创建“保留”标识符?

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__(如果可用),否则将使用解决方法。

以上是关于什么时候可以创建“保留”标识符?的主要内容,如果未能解决你的问题,请参考以下文章

Java的概念和定义是啥?

基础快速过 之C语言 二:什么是关键字 标识符 系统保留字 变量和常量[各个语言通用]

.Net开发的两个小技巧

第五章 SQL定义表(一)

.Net开发中的@ 和 using 使用技巧

什么是python标识符