【问题标题】:Procedure to include own functions to ANSI C Standard library将自己的函数包含到 ANSI C 标准库的过程
【发布时间】:2017-11-13 14:06:53
【问题描述】:

如何将自己的编程函数包含到标准 C (ANSI C) 库中? 任何学习或使用 C 语言的人都可以随时随地使用这些函数,无需总体发展。

示例:有人开发了名为“FunFun()”的函数,并假设它对大多数程序员来说都很棒。那么如何在不开发和仅包含标准库的情况下访问这个“FunFun”功能呢?

【问题讨论】:

  • 没有 the C library,任何人都可以写一个,而且已经有各种各样的了。当然,编写您自己的 C 库,您可以添加任何您想要的扩展,许多供应商都会这样做。但是如果你只是想分享一些你写的代码,写一个 stand-alone library,他们就是这样'在那里。
  • 您需要下载 C 库的源代码,在其中添加您自己的函数,再次编译和创建一个库,然后使用标准库路径中存在的原始 C 库安装和替换该库.
  • 如果您希望自己的superGreatFunction()any 标准C 库中可用,这意味着更新C standard (!!) 所以任何实现者都必须包含它。玩得开心;)
  • 我投票决定将此问题作为题外话结束,因为您清楚地意识到它是题外话——如果已知它是题外话,您就不会在顶部和底部添加道歉。
  • 请注意,<stdlib.h> 是标头,而不是库。尝试修改机器上的标准库会很鲁莽。除此之外,下次更新系统以修复标准库中的安全问题时,您的更改将丢失。您可以将自己的库添加到适当的位置(例如/usr/local/lib)以供一般使用 - 您可以将相关标题放在/usr/local/include中。

标签: c function ansi standard-library


【解决方案1】:

实现它的明智方法是开发一个第三方库并通过开源、Github 等在互联网上提供它。

GNU C 方言就是这样一个例子,它是 GCC 编译器使用的非标准编译器扩展的集合。可以加入 GCC 开源组并尝试在那里添加新功能。它仍然不是标准库 C,但 GCC 扩展通常是 C 标准的灵感来源,其中一些(指定的初始化程序、灵活的数组成员、匿名结构/联合等)已被 C99 采用到语言本身中,并且C11 标准。 GNU C 的目的之一实际上是作为一个实验场所,可以现场试用新的语言功能。

如果您真的希望在实际的 C 标准库中添加新函数,则必须加入 ISO working group 并说服他们将该函数添加到语言中。或者找一位委员会成员,说服他们发言支持新职能。

所有这一切当然都假设您是一名 C 编程老手,否则没人会认真对待您。

【讨论】:

  • GNU C 实际上不是一个库,而是 C 语言本身的扩展。其中一些现在是遗留问题,因为 C99(行 cmets、VLA、FAM ......)和 C11(原子......)为它们提供了可移植的方式。
  • @Olaf 否,但-std=gnu11 编译器选项会导致非标准函数在标准头文件中弹出,而-std=c11 -pedantic-errors 会从它们中去除非标准函数。
  • gcc 实际上只是一个独立的 limplementation。除了少数强制性标头(主要提供目标抽象/信息)外,它根本不提供标准库。您对 glibc 是正确的,但 gcc 基本上可以使用其他库(afaik 这是在 Windows 上使用 MinGW 的情况,不是吗?)。
【解决方案2】:

您的问题无法回答,因为它基于几个错误的假设。

  • stdlib.h 这样的东西不是库。它们是头文件,旨在包含在您的程序中。包含意味着在实际编译发生之前,在包含点将内容按字面意思粘贴到您的程序中。它们通常用于声明库提供的函数、类型、全局变量等。实际的库会在编译后链接

  • 没有 C 库这样的东西,也没有 C 编译器这样的东西。 是一种在开放标准中指定的语言(如果您有兴趣,这里是last draft of the latest standard version C11)。有许多实际的实现,一个完整的实现至少包括一个编译器和一个标准库。您当然可以实现自己的标准库。要使其真正符合标准需要做很多工作(例如,您必须正确实现printf()scanf())。使用您自己的标准库,您还可以包含自己的扩展,但这仅意味着人们使用您的标准库(而不是例如在 GNU 系统上的glibc)可以直接使用。

  • 为了在 C 的 any 实现上提供可用的函数,有必要让 C 标准 指定它。如果没有一些非常充分的理由,您将不会在标准中获得新功能。


因此,如果您想将自己的函数提供给其他人使用,请按照每个人的做法,只需在您自己的库中实现它。用户可以下载它,包含它的标题和链接。

【讨论】:

  • C 标准不是开放标准。要访问它,您需要向 ISO 或您的国家标准机构付费。该草案恰好与最终标准非常相似(我可以访问两者),但不能保证这一点。例如,您不应将标准草案列为有效的正式来源。
  • @Lundin 请注意,开放标准 一词并未明确指定,并且不一定要求免费访问该文档。
  • 免费与否,开放标准的粗略定义不是由标准机构控制,而是由其他组织控制。如果不是,那么除了公司内部标准之外的所有标准都将是“开放的”。
  • @Lundin See Wikipedia 用于各种略有不同的定义。你写的是一种共同的最小分母;)
  • @Lundin - “开放标准”有多种定义,但都不排除由标准机构控制。这些定义通常相当于“公开可用”(不同于“免费”)和“在协作和共识驱动的过程中开发”的标准。
猜你喜欢
  • 2013-06-12
  • 2011-11-14
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多