C语言并不是面向对象的程序设计语言,但是我们可以通过extern和static实现程序的封装和隐蔽。
举个例子,我们在主函数中要使用一个栈,栈的实现代码在stack.c中,我们要主函数不能访问stack.c中的除压栈,出栈之外的所有变量和函数,那么我们就可以把这些不想被访问的变量或函数声明为static,这样主函数将无法访问。
下面是代码例子:
main.c文件:
1 2 3 4 5 6 7 8 |
<span style="color: #993333;">int</span> main<span style="color: #009900;">(</span><span style="color: #993333;">void</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span> <span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #993333;">void</span> push<span style="color: #009900;">(</span><span style="color: #993333;">char</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">extern</span> <span style="color: #993333;">char</span> pop<span style="color: #009900;">(</span><span style="color: #993333;">void</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> ... <span style="color: #009900;">}</span> |
stack.c文件:
1 2 3 4 5 6 7 8 9 10 |
<span style="color: #993333;">static</span> <span style="color: #993333;">char</span> stack<span style="color: #009900;">[</span><span style="color: #0000dd;">512</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span> <span style="color: #993333;">static</span> <span style="color: #993333;">int</span> top <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span> <span style="color: #993333;">void</span> push<span style="color: #009900;">(</span><span style="color: #993333;">char</span> c<span style="color: #009900;">)</span> <span style="color: #009900;">{</span> stack<span style="color: #009900;">[</span><span style="color: #339933;">++</span>top<span style="color: #009900;">]</span> <span style="color: #339933;">=</span> c<span style="color: #339933;">;</span> <span style="color: #009900;">}</span> <span style="color: #993333;">char</span> pop<span style="color: #009900;">(</span><span style="color: #993333;">void</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span> <span style="color: #b1b100;">return</span> stack<span style="color: #009900;">[</span>top<span style="color: #339933;">--</span><span style="color: #009900;">]</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> |
这样,就实现了栈内部变量的隐蔽和保护。
转载请注明:爱开源 » 通过extern和static实现c语言的封装