打印
[N32G03x]

函数隐式声明只报个警告,是不是就代表编译器可以自己找到那个函数啊?

[复制链接]
567|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Stahan|  楼主 | 2024-7-22 21:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
所以编译器有自己查找相关头文件的能力啊?

使用特权

评论回复
沙发
kaif2n9j| | 2025-2-18 12:57 | 只看该作者
函数隐式声明只报个警告,并不代表编译器可以自己找到那个函数。

使用特权

评论回复
板凳
b5z1giu| | 2025-2-18 14:05 | 只看该作者
在C语言中,如果函数在调用前没有声明,编译器会自动按照隐式声明的规则,为调用函数的C代码产生汇编代码。

使用特权

评论回复
地板
lix1yr| | 2025-2-18 15:12 | 只看该作者
其实隐式声明的函数默认返回类型为int,并且不接受任何参数(或者接受任意数量的参数,但这并不符合严格的C语言规范)。

使用特权

评论回复
5
suw12q| | 2025-2-18 16:19 | 只看该作者
当编译器遇到隐式声明的函数时,它会发出警告,提示程序员该函数没有被显式声明。

使用特权

评论回复
6
q1ngt12| | 2025-2-18 17:26 | 只看该作者
一般来说,这个警告的目的是提醒程序员注意潜在的问题,而不是表示编译器已经找到了该函数的定义。

使用特权

评论回复
7
tax2r6c| | 2025-2-18 19:23 | 只看该作者
在链接阶段,编译器会尝试找到所有被调用的函数的定义。如果某个函数只是被隐式声明而没有在链接库中找到对应的定义,链接器会报错,提示找不到该函数的定义。

使用特权

评论回复
8
lamanius| | 2025-2-18 20:34 | 只看该作者
即使链接器没有报错(比如因为隐式声明的函数恰好与某个库函数名称相同,但参数或返回类型不匹配),程序在运行时也可能出现错误。这是因为编译器生成的调用代码可能与实际的函数定义不匹配

使用特权

评论回复
9
d1ng2x| | 2025-2-19 09:21 | 只看该作者
在调用函数之前显式声明该函数。这通常是通过包含包含该函数声明的头文件来实现的。

使用特权

评论回复
10
ex7s4| | 2025-2-19 11:00 | 只看该作者
确保链接器能够找到所有被调用的函数的定义。这可能需要将包含这些函数定义的源文件编译为对象文件,并将它们链接到最终的可执行文件中。

使用特权

评论回复
11
cen9ce| | 2025-2-19 13:27 | 只看该作者
好像不是编译器有搜查的能力吧,可能是有关键词导致的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

2331

帖子

0

粉丝