c++ - 在 #define 的开头使用下划线作为包含守卫

标签 c++ xcode

This answer指向引用资料,指出您不应使用两个下划线后跟一个大写字母。

然后是this comment to this question ,第一个来自@metal,它说你在创建包含守卫时也不能使用这样的名字。

但是,我很好奇为什么 Xcode 在自动为新的 C++ 文件创建包含保护时会完全这样做:

#ifndef __DataSource__File__
#define __DataSource__File__

#include <iostream>

#endif 

这是 Xcode 放置在新 C++ 文件顶部的标准生物盘;在本例中,项目名为“DataSource”。如果项目名称以数字开头,则 Xcode 会将此数字替换为第三个下划线。

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

最佳答案

If it's illegal for a user to write this, then isn't it illegal for Xcode to write this?

的确,尽管“非法”这个词可能有点过分了。如果这是默认行为,那么将其配置为生成狡猾的 include 守卫的人都不知道您不应该这样做。遗憾的是,并非每个软件开发人员(甚至是开发工具开发人员)都完全了解他们使用的语言和工具。

很多人喜欢用奇怪的下划线模式来装饰他们的包含守卫,即使他们不应该这样做。据推测,他们看到它在标准库头文件中完成(因为它应该是这样的,因为这是保留此类名称的那种东西)并假设他们出于某种原因应该做同样的事情。

关于c++ - 在 #define 的开头使用下划线作为包含守卫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204801/

相关文章:

c++ - 未调用已初始化静态 thread_local 结构的构造函数和析构函数

c++ - C++中使用双指针的动态二维数组

objective-c - tableview 的问题

ios - 在上传到应用商店之前,可以使用真实的 Admob id 在模拟器上测试广告吗

iphone - 本地化不适用于一个 Nib

java - 将可绘制对象作为字节数组发送到android的jni部分

c++ - 替换失败不是枚举的错误 (SFINAE)

iphone - MKReverseGeocoder "deprecated in iOS 5"

c++ - 如何告诉 GCC 不要链接运行时库和标准库?

swift - 无法从 Xcode 11.7 构建到 iOS 14 设备