Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在#define的开头为include-guard使用下划线_C++_Xcode - Fatal编程技术网

C++ 在#define的开头为include-guard使用下划线

C++ 在#define的开头为include-guard使用下划线,c++,xcode,C++,Xcode,指向参考资料,说明不应使用两个下划线后跟大写字母 还有,第一个是@metal,它表示在创建include-guard时也不能使用这样的名称 但是,我很好奇为什么XCODEL在自动创建新的C++文件包含保护:时确实做到了这一点。 #ifndef __DataSource__File__ #define __DataSource__File__ #include <iostream> #endif \ifndef\uu数据源\uu文件__ #定义数据源文件__ #包括 #恩迪夫

指向参考资料,说明不应使用两个下划线后跟大写字母

还有,第一个是@metal,它表示在创建include-guard时也不能使用这样的名称

<>但是,我很好奇为什么XCODEL在自动创建新的C++文件包含保护:

时确实做到了这一点。
#ifndef __DataSource__File__
#define __DataSource__File__

#include <iostream>

#endif 
\ifndef\uu数据源\uu文件__
#定义数据源文件__
#包括
#恩迪夫

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


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

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

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

事实上,尽管“非法”可能是一个相当强势的词。如果这是默认行为,那么任何将其配置为生成dodgy include guards的人都不知道您不应该这样做。不幸的是,不是每个软件开发人员(甚至是那些开发工具的开发人员)都完全了解他们所使用的语言和工具


很多人喜欢用奇怪的下划线图案装饰他们的护卫,尽管他们不应该这样做。据推测,他们在标准库标题中看到了这一点(应该是这样的,因为这类名称是保留的),并假设出于某种原因,他们也应该这样做。

“不应该”并不意味着“非法”。在过去的40多年里,包括警卫在内的“标准”已经遍布各地。事实上,如果标准将这些称为“保留标识符”,那么使用它们是一个坏主意。那么为什么一个主要的IDE会这样做呢?@SebbyJohanns:为什么不会呢?软件开发者只是人类,即使是在苹果,人类也因其错误而臭名昭著。Objul-C是基于C而不是C++。它的标准在C++之前就可以恢复了。我是在谈论原始C++文件。Xcode支持多种语言。但是Objective-C/Xcode是“实现”——如果他们想这样做,他们可以这样做。@HotLicks绝对不正确。XCODE不是Objtovi.C的同义词。你可以用XCODEL构建多种语言的软件,这个问题具体地讨论了它如何处理C++。事实上,在Xcode.Pedantic位中使用其他语言创建文件时,不会出现此问题。宏符号实际上不受此限制。第16.8-4节只是指出预定义宏必须遵循此限制。第17.6.4.3.2节规定,全局名称受此限制的约束,但不包括宏。虽然与17.6.4.3.1(宏名称不能与全局名称重叠)相结合,但这可能意味着它们实际上是不允许的。@edA-qamort-ora-y:我想你错过了17.6.4.3.2中的一部分,即这样的名称(包含双下划线)是为任何用途保留的,即包括宏。正如您所说,即使它是限制较少的名称类型(以一个下划线开头),定义宏也可以防止它在全局命名空间中作为名称保留使用,因此,除非您非常小心地定义它。@HotLicks-我不明白您为什么如此积极地为错误行为辩护。Xcode这样做有什么好的理由吗?