我真的需要头文件来使用库吗?我的代码在没有头文件的情况下工作,并且库完全链接,除了我得到一个"警告:隐含的函数声明" message.Still只是警告我的程序运行。
答案 0 :(得分:1)
Header file: - 是一个允许程序员将程序源代码的某些元素分离为可重用文件的文件。
库文件是可执行代码,它根据头文件中指定的内容工作。
我收到“警告:隐式声明功能”消息。
这种警告可能有很多原因,例如你的头部防护装置可能无法正常工作。另一种可能性是您已声明函数Func
,但使用func
调用它。
检查this: -
包含头文件等于复制头的内容 文件,但我们不这样做,因为它会非常容易出错 复制源文件中头文件的内容不是一个好主意 文件,特别是如果我们有多个源文件包含我们的 程序
答案 1 :(得分:1)
对于大多数初学者来说,当他们开始使用
时会看到这个警告malloc
所以我正在使用这个例子。对于这种情况下的警告,您需要添加:
#include <stdlib.h>
此文件包含内置函数malloc
的声明。如果你不这样做,编译器认为你想要定义你自己的名为malloc
的函数,它会警告你,因为:
int
,与内置malloc
不兼容,内置size_t
并返回void*
。)答案 2 :(得分:1)
我的代码在没有头文件的情况下工作,并且库是链接的 除了我得到一个“警告:隐式声明 功能“message.Still它只是一个警告我的程序运行。
忽略编译器的警告是一种不好的做法。未正确编译的程序可能存在可能在将来导致更大问题和错误的错误。
例如,如果您收到警告:
prog.c:12:5: warning: implicit declaration of /*some function used in the program*/
预计您必须包含定义该函数的头文件。
答案 3 :(得分:1)
我真的需要使用头文件来使用库吗?
是
我的代码无头文件
不,它没有。它似乎只是起作用。
并且库完全链接,除了我得到“警告:隐式声明函数”消息
在这种情况下,我不会称之为“完美”。
仍然只是警告我的程序。
你永远无法知道它的作用,因为它现在会调用未定义的行为。“只是一个警告”?当然。编译器警告你是有原因的。 尊重警告并修复它们。
这是C99(6.5.2.2.6)的引用,它解释了为什么程序的UB没有标题(更确切地说,没有你似乎没有的正确函数原型):
- 如果表示被调用函数的表达式具有不包含原型的类型,则对每个参数执行整数提升,并将类型为float的参数提升为double。这些被称为默认参数促销。 如果参数数量不等于参数数量,则行为未定义。
醇>如果使用包含原型的类型定义函数,并且原型以省略号(,...)或结尾,则促销后的参数类型不是与参数类型兼容,行为未定义。
如果使用不包含原型的类型定义函数,并且促销后的参数类型与促销后的参数类型不兼容,则行为为undefined,除以下情况外:
- 一个提升类型是有符号整数类型,另一个提升类型是 相应的无符号整数类型,该值可在两种类型中表示;
- 两种类型都是指向字符类型的限定或非限定版本的指针 空隙。
使用头文件有一个很好的理由。发明和设计语言的人都知道他们在做什么,他们做出了这个决定,因为这是一个必要的事情,也是解决问题的好方法,需要在编译单元中看到类型。