gcc 通过声明原型而不包含头文件就可以使用标准库中的函数

5lwkijsr  于 2022-11-24  发布在  其他
关注(0)|答案(3)|浏览(199)

我一直在玩我的代码编辑器,不小心做了这个。它编译得很好,并且按预期工作。对于额外的上下文,我在Debian 11上使用GCC。至于我是如何知道原型的,VS Code的IntelliSense告诉了我。
它为什么工作,如何工作?不包括<stdio.h><math.h>

double pow(double _x, double _y);
int printf(const char *__restrict__ __format, ...);

int main(void)
{
    printf("%f\n", pow(2, -1));
}

输出:0.500000

rdlzhqv9

rdlzhqv91#

您可以像以前那样声明您的函数,或者通过包含相关的头文件(首选)来声明。gcc将链接到libc中的定义,除非您告诉它不要这样做(使用-nolibc

goucqfw6

goucqfw62#

它之所以能工作,是因为C标准明确要求它工作。
7.1.4如果库函数可以在不引用头文件中定义的任何类型的情况下声明,则也允许在不包含其相关头文件的情况下声明和使用该函数。

1szpjjfi

1szpjjfi3#

标准库链接到大多数C项目中。如果创建了标准项目,IDE很可能会在后台为您处理该部分。
根据编译器的配置,如果函数也被定义了的话,它可以从libc中拖进来,这样可以进行一些优化。
头文件告诉你的程序如何访问那些函数。如果库是链接的,那么它的所有函数都在那里,不管头文件是否存在。你没有神奇地绕过任何东西或类似的东西。你只是提供了函数的一个替代声明。

相关问题