问题描述
是否可以将我自己的函数添加到 C 现有库中?比如我想添加这个功能:
#include <stdio.h>
int main()
{
int prices[5] = { 1,2,3,4,5 };
int size = sizeof prices / sizeof prices[0];
return size;
}
到 stdio.h
图书馆。
有可能吗?如果是,我该怎么做?
解决方法
通常,您可以创建自己的库,其中包含所有其他库以及您添加的例程,并且可以在您的系统中安装该库来代替原始库。
你不应该这样做。
一般来说,当一个人想要提供一个功能时,一个人会编写自己的库并将其作为一个单独的产品发布。
stdio.h
不是图书馆。它是一个头文件。它声明在别处定义的对象和函数,它可能声明相关的东西,如宏和类型名称。术语“库”通常用于指相关的打包目标模块或作为软件库的整个产品:目标模块、头文件及其文档。
在 C 中,函数无法计算数组的长度,因为无法将数组传递给函数。当数组用作函数的参数时,编译器会自动将其转换为指向数组第一个元素的指针。这个指针没有关于数组大小的任何信息。例如这个函数:
size_t foo(int array[])
{
return sizeof array / sizeof array[0];
}
将返回指向 int
的指针的大小除以 int
的大小。对于传递给它的任何大小的所有数组,它都会返回相同的值,因为它的 int array[]
参数会自动调整为 int *array
。
可以定义一个宏来计算数组的大小:
#define NumberOf(a) (sizeof (a) / sizeof *(a))
这可以作为宏使用,因为宏不同于函数。宏参数不像函数参数那样传递,sizeof
运算符直接使用它的参数 - 不会对 sizeof
操作数执行数组到指针的转换。
这个宏可以在头文件中发布,尽管它非常简单,通常只在使用它的源文件中定义,而不是在头文件中提供。如果您确实在头文件中发布了它,则应该将其发布在您自己的头文件中。在创建自己的 C 实现之前,不应修改标准 C 头文件。
,在您当地是可能的:
-
找到stdio库的来源(例如见Where to find stdio.h functions implementations?),
-
插入您的函数源代码,
-
编译。
您的更新有朝一日出现在任何公共发行版(例如 MacOS 或 Ubuntu)中的可能性很小:正如您在评论中所见,开发者社区尚未准备好接受此类更改。
帮助人们的更好方法是创建自己的图书馆并将其传播到全世界。
,到 stdio.h
图书馆。
stdio.h
不是库只是一个头文件。
是否可以将我自己的函数添加到 C 现有库中?
当然有,但没有太大意义。只需创建您自己的库。
更改标准库是一个非常糟糕的主意,除非您知道自己在做什么(阅读:您是一位非常有经验的程序员)并且您将其移植到另一个目标或在您自己的实现上工作。
我想添加这个函数:int main()
向库中添加 main
函数是一个非常糟糕的主意。