你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
查看全部评分
toofree 发表于 2020-4-17 11:41 具体情况具体分析,有时也跟编译器有关。 如果在调用时发现没有extern的话,有的编译器会报个警告,然后自 ...
jtqwaszx 发表于 2020-4-17 12:46 好吧,感谢回复。不过 缺点是 我本不想让其他文件调用的函数,能被其他文件调用了。 ...
stm1024 发表于 2020-4-20 09:10 一般来说,把函数声明放在h文件中,把实现代码放在c文件中。如果你只是不想你的函数被其他地方调用,你可 ...
lebment 发表于 2020-4-25 20:19 我对于楼上两位不敢苟同,甚至觉得两位是误导,第一点:extern 一个其它文件里没有的变量或者是函数,都可 ...
如果在调用时发现没有extern的话,有的编译器会报个警告,然后自己去找。
同样的道理也适用于#define
评分
查看全部评分
好吧,感谢回复。不过 缺点是 我本不想让其他文件调用的函数,能被其他文件调用了。
一般来说,把函数声明放在h文件中,把实现代码放在c文件中。如果你只是不想你的函数被其他地方调用,你可以把函数的声明和实现都写在c文件中。
评分
查看全部评分
第二点可以解决你的问题,使用extern 就是多个文件统一一个已经定义过的函数或者变量,不需要include什么头文件,直接extern定义即可,源码一个变量或函数,可以被其它源码文件extern 引用,但是你不能定义,这是有区别的。
评分
查看全部评分
话是这样说 不假
额 其实我不怎么赞同前两位的回复,不过你的解释 我硬是看了好几遍 没看懂个
用一个简单的项目测试一下,这个是头文件:
1. 如果不使用extern int foo; 则代码无法编译通过,在main函数中不能直接使用foo,达到了部分隐藏的功能,不过别人想要用你的变量foo,一个extern还是能够使用,无论你是放在头文件还是c文件中,都没辙。
2. main函数中直接调用test2,编译器不会通过编译,显示undefine reference,起到了隐藏的效果,即使你在main所在的c文件中,试图通过extern static void test2();也无法通过编译。
3. 此外,在test3的实现中,又可以调用test2函数,test2函数像是Func下的私有函数。
这是目前能达到的效果,C还无法像C++的类定义那样,使用private/protected/public等,设置不同的访问限制。
如果不想要其它文件的函数调用到加个static不行吗?