在include保护的#define开头使用下划线

Using underscores at the start of a #define for an include guard

本文关键字:下划线 开头 #define include 保护      更新时间:2023-10-16

这个答案指向参考资料,说明你不应该使用两个下划线后跟一个大写字母。

然后是这个问题的注释,第一个是@metal,它说你也不能在创建include守卫时使用这样的名称。

然而,我很好奇为什么Xcode在自动为新的c++文件创建包含保护时确实这样做:

#ifndef __DataSource__File__
#define __DataSource__File__
#include <iostream>
#endif 

这是Xcode放在新c++文件顶部的标准生物模板;在本例中,项目被命名为"DataSource"。如果项目名称以数字开头,Xcode会用第三个下划线替换这个数字。

如果用户写这个是非法的,那么Xcode写这个不是非法的吗?

如果用户写这个是非法的,那么Xcode写这个不是非法的吗?

的确,尽管"非法"可能是一个相当强烈的词。如果这是默认行为,那么将其配置为生成可疑的include守卫的人不知道不应该这样做。遗憾的是,并不是每个软件开发人员(甚至是那些开发工具的人)都完全了解他们使用的语言和工具。

很多人喜欢用奇怪的下划线来装饰他们的include守卫,即使他们不应该这样做。据推测,他们在标准库头文件中看到了这一点(应该是这样,因为这是保留这些名称的类型),并假设出于某种原因他们也应该这样做。

Xcode错误。以下划线开头后跟大写字母的名称以及包含两个连续下划线的名称保留给实现使用。一直都是。