“嵌套函数作为GNU C中的扩展支持”中有关“扩展”的处理是什么?

时间:2015-12-22 10:01:21

标签: c function gcc standards

online manual,我可以看到,

  

GNU C中支持嵌套函数作为扩展,但GNU C ++不支持。

这是什么意思?我该如何获得该扩展?

3 个答案:

答案 0 :(得分:3)

您不需要获取扩展程序。这是GNU C编译器中嵌入的一个功能。

FWIW,此处扩展名指向C标准的扩展名。详细说明,来自online manual

  

6。扩展

     

GNU C提供了ISO标准C中没有的几种语言功能。(如果使用任何这些功能,-pedantic选项指示GCC打印警告消息。)要在条件编译中测试这些功能的可用性,请检查对于预定义的宏 GNUC ,它总是在GCC下定义。

答案 1 :(得分:2)

每个C编译器都支持该语言的一个或多个版本,可以是标准版本或非官方版本。例如,GCC支持三种版本的标准,请参阅https://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards

此外,GCC supports so-called extensions,该语言的其他功能,可能为了方便开发人员,或者为了测试可能使其成为官方C标准的更高版本的实验性功能。默认情况下启用这些扩展,因此不需要安装其他软件包,它们只是编译器本身不可或缺的一部分。

如果特定编译器是项目唯一支持的目标,则通常仅使用这些扩展。开发人员通常会优先考虑可移植性和标准的一致性,以最大限度地提高代码库的可维护性。

关于这一特定功能,重要的是要注意C ++ 11增加了对lambda函数的支持,这可能证明在G ++中缺乏对此扩展的支持,因为它们会在没有任何额外好处的情况下发生冲突。

答案 2 :(得分:1)

1st。您提到的链接是针对当前的GCC开发版本。此刻它是v6.0.0。我认为你并没有真正使用它。很可能你正在运行一些v4或v5编译器。请尝试gcc -v进行检查。

第二。 GCC has a few command line options控制确切的"方言"你愿意用。在特定情况下,嵌套函数不在任何当前标准(AFAIK)中,因此您需要确保选择GNU方言。默认值为gnu89,即" ISO C90(包括一些C99功能)"。选项-std=gnu11应选择"最先进的方言"™。但强烈建议您完整阅读本文档。

第3次。一旦您知道自己运行的是哪个版本,就可以访问相关的在线文档并查看" Extensions to the C Language Family" (我链接到v4.9.3作为示例)该扩展是否可用以及实际上是什么。

我说,是的。