Objective c编译失败的解决

本文探讨了在Objective-C中遇到的一个关于函数'MyAdd'的编译错误:'Nopreviousprototypeforfunction'MyAdd'。通过分析,作者解释了如何正确声明函数以及使用static关键字来限定函数的作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天碰到一个奇怪的报错:No previous prototype for function 'MyAdd'

下面贴下源码:

main.m文件中

int MyAdd()

{

return 0;

}

int main (int argc,constchar * argv[])

{

//这里省略不重要的代码

return 0;

}

编译的时候报了上面的错误。查了下,说是要再头文件中做下声明,于是又再头文件中声明了下,再次编译,还是报错。再次查了下,又发现有人说在函数前面加上static就可以解决了,果然,加了后确实解决了。问题是解决了,但是为什么会这样?在c语言中,这样的用法是很正常的,但是在objective c中就不行了。仔细查了资料发现了问题的所在。

这里有2个问题:

1,MyAdd()函数是没有参数的,这里需要明确的表示出来,也就是需要加上void,这里是需要声明的

2,static能够解决,表明这是一个在本文件中使用的函数,也是可以不用声明的

具体为什么能够会这样,还是有点模糊,下次再查下资料。

纪录下


刚刚再次查了下,发现下面的答案:

This means that GCC found a global function definition without seeing a prototype for the function. If a function is used in more than one file, there should be a prototype for it in a header file somewhere. This keeps functions and their uses from getting out of sync

If the function is only used in this file, make it static to guarantee that it'll never be used outside this file and document that it's a local function

大意就是说gcc如果认为他是全局的函数,就必须要再.h中声明,否则就只能在本文件中使用,也就需要加上static。


这下该满足了吧






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值