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

[复制链接]
874|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语言规范)。
suw12q 发表于 2025-2-18 16:19 | 显示全部楼层
当编译器遇到隐式声明的函数时,它会发出警告,提示程序员该函数没有被显式声明。
q1ngt12 发表于 2025-2-18 17:26 | 显示全部楼层
一般来说,这个警告的目的是提醒程序员注意潜在的问题,而不是表示编译器已经找到了该函数的定义。
tax2r6c 发表于 2025-2-18 19:23 | 显示全部楼层
在链接阶段,编译器会尝试找到所有被调用的函数的定义。如果某个函数只是被隐式声明而没有在链接库中找到对应的定义,链接器会报错,提示找不到该函数的定义。
lamanius 发表于 2025-2-18 20:34 | 显示全部楼层
即使链接器没有报错(比如因为隐式声明的函数恰好与某个库函数名称相同,但参数或返回类型不匹配),程序在运行时也可能出现错误。这是因为编译器生成的调用代码可能与实际的函数定义不匹配
d1ng2x 发表于 2025-2-19 09:21 | 显示全部楼层
在调用函数之前显式声明该函数。这通常是通过包含包含该函数声明的头文件来实现的。
ex7s4 发表于 2025-2-19 11:00 | 显示全部楼层
确保链接器能够找到所有被调用的函数的定义。这可能需要将包含这些函数定义的源文件编译为对象文件,并将它们链接到最终的可执行文件中。

cen9ce 发表于 2025-2-19 13:27 | 显示全部楼层
好像不是编译器有搜查的能力吧,可能是有关键词导致的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

2335

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部