为什么要包含stdlib.h?

C函数malloc()是在stdlib.h下定义的。如果我们不包含这个文件应该给出错误,但是这个代码可以正常工作并带一点警告。 我的问题是,如果malloc()没有这个头文件,那么为什么要包含它呢? 请清楚我的概念。

# include  int main() { int a, b, *p; p = (int*)malloc(sizeof(int)*5); for(a=0;a<5;a++)p[a]=a*9; for(b=0;b<5;b++)printf("%d ",p[b]); } 

在C中,遗憾的是您不需要预先声明函数。 如果编译器遇到一个新函数,它将为它创建一个隐式声明(“mmm`kay,这是如何使用它所以我将假设参数的类型是……”)。

不要依赖这个“function”,一般不要编写编译警告的代码。

阅读警告。 它说这是无效的。 编译器对你太好了。 在Clang中这是有效的,但在其他编译器中可能没有。

至少包括它来压制警告。 不必要的警告很烦人。 任何程序都应编译时将警告视为错误(我总是启用它)。

看来这是你的编译器的魔力。 不包括必要的标题可能适用于您的编译器(我想是由Microsoft),但它不一定在别处编译(包括同一编译器的未来版本)。 编写符合标准的可移植代码。

与c中的许多事情一样,由于历史原因,没有原型时不会产生错误。 在早期,人们经常不打扰原型函数,因为指针和整数通常是相同的大小,小于整数的整数类型在作为参数传递时被提升为整数(并且浮点很少用于系统编程)。

如果在任何时候他们已经改变了编译器以在函数没有原型的情况下给出错误那么它将破坏许多程序并且不会得到广泛接受。

使用64位寻址时,我们现在进入一个整数和指针大小不同的时期,如果没有像malloc()这样返回指针的函数原型,程序很可能会中断。

在gcc中,总是为您自己的程序设置以下选项: -Werror -Wstrict-prototypes

stdlib.h是通用标准头文件,包括动态内存分配和其他标准函数的function。

例如,如果要在程序执行结束时显示消息,则需要使用getch()函数,此函数从键盘读取字符,从而使用户有时间读取显示的信息。

getch()函数需要包含stdlib头。