C ++ GCC / MinGW路径:ssp,ext,tr1;并行,分机,比特,实验

时间:2015-06-20 21:50:40

标签: c++ gcc clang mingw-w64 libc++

问题:

在GCC / MinGW文件夹树中,文件夹中有一些头文件名重复:ssp,ext,tr1; parallel,ext,bits和experiemental ......

应该明确"包括"在生产代码中避免使用这些文件夹的指令 - 作为最佳实践

或者,是否有在线文档,关于这些文件夹应在#include语句中明确使用的合法方案?

注意:  1. SSP :( Stack Smashing Protector)  2. tr1:技术报告1,(Stack Link)似乎已被弃用。

工具链:

C ++ 11和C ++ 14:

Eclipse CDT,使用Clang ToolChainGoogle Test APIMinGW(5.1)。

在发布此帖子时,Clang's LibC++尚未针对Windows构建,因此使用MinGW:Posix,SEH,X86_64,捆绑。

<stdio.h>文件夹:

  1. 包括/ stdio.h中
  2. 包括/ C ++ / TR1 / stdio.h中
  3. LIB / GCC / x86_0w64-的mingw32 / 5.1.0 /包含/ SSP / stdio.h中
  4. <algorithm>文件夹:

    1. 包括/ C ++ /算法
    2. 包括/ C ++ /实验/算法
    3. 包括/ C ++ / EXT /算法
    4. 包括/ C ++ /并行/算法

1 个答案:

答案 0 :(得分:2)

(从评论中移动/扩展)

我总是看到从这些位置明确包含的内容,例如<bits/c++config.h><ext/bitmap_allocator.h><tr1/cmath>等,从不将其中一个目录直接添加到包含搜索路径。请注意,据我所知,bits目录应该大部分保留,因为它包含特定于实现版本的东西(不一定是稳定的API)。我找不到这方面的明确文档,但是库的一般结构(在根中包含标准公共头文件,包括他们的bits对应文件)似乎是这样建议的。

  

这些是否应该作为最佳做法避免?或者,它们应该被利用的场景是什么?

排除bits,其他所有内容都可以使用,只要您愿意接受您依赖于libstdc++而不是单独的标准C ++,如{{3 }}:

&#34;较少的非标准&#34;东西就是你在tr1找到的东西;它来自http://gcc.gnu.org/onlinedocs/libstdc++/manual/using_headers.html,它不是真正的&#34;标准,但建议将包含在即将到来的C ++ 11标准中;在2011之前你可以使用它并期望与其他编译器有一定程度的互操作性,今天你可以放心地忽略它并且只使用C ++ 11(实际上是标准化的,并且在一些细节上有很大不同)。

所有ext都是libstdc ++扩展,有些是来自SGI STL,有些是更新的开发;它们中的一些将被包含在一些标准C ++提案中并非不可能,但在这种情况下,它们可能会移动到其他地方。

parallel目录包含一些经典STL算法(C++ TR1)的并行实现;再次,IIRC有一个标准化它们的提议,但如上所述,我希望它们能够移动到其他地方,以防它们标准化,因为很少标准化使提案完好无损,而且他们需要一种方法让旧程序运行良好使用旧的标题/语义。

experimental包含新实验技术规范的内容(概念类似于TR1),应该毕业于真实的&#34;新标准发布时的标准库;在我的gcc 4.9.2安装中,我只能在那里找到string_viewoptional,但details here;就个人而言,与tr1一样,在生产代码中使用这些标题之前,我会等待新的标准,因为,就像它们一样,它们仍然是一个移动目标,并且代码质量不在与图书馆的其他部分相提并论(正如名称所说,它仍然是实验性的东西)。

ssp文件夹包含Stack Smashing Protector。来自OSDev,(some other stuff should come):

  

如果通过编译器选项请求,或者如果编译器供应商默认启用它,则GCC等编译器会启用此功能。如果您的操作系统具有安全意识且您提供支持,则默认启用它是值得考虑的。