C语言模块化设计的问题。

lonelybug 2009-03-21 12:30:00
是这样,最近在用C设计一个程序,看了相关的设计理念的文章--模块化设计。

比较明白也可以设计,但是有一个问题。当上层模块使用同层或者底层模块的接口的时候(#include底层模块或者同层模块的.h文件),如果发布这个上层这个借口给最终用户调用使用的时候,虽然,用户只能看见最上层接口的暴露出来的函数,但是,理论上说,如果这个用户知道(或者猜得到)底层的那个接口的函数,一样可以使用!

比如
a.h包含了底层的b.h

虽然最终的用户只能看见a.h中的“helloA();”这个函数,但是如果在b.h中有一个"helloB();"的话,这个用户一样可以通过包含一个"a.h"来调用b.h中的helloB()这个借口函数。

C是不是只能这样子来实现接口。

不知道,我理解的对不对!?

县谢谢各位大虾了。
...全文
142 点赞 收藏 7
写回复
7 条回复
lonelybug 2009年03月21日
ls啥意思,我没看明白。

你是说,这就是c本身的语言问题?

如果是的话,我记得c99里面有扩展好像可以隐藏么?

继续,在谢谢各位帮忙。
回复 点赞
猫已经找不回了 2009年03月21日
嗯,只想到这样在C里提供接口。
回复 点赞
qqwx_1986 2009年03月21日
既然封装了 就安心用现成的
回复 点赞
softwaregf 2009年03月21日
没错,所以,我们这是一个比较难解决的问题,也许我们可以把原本应当定义为helloB,定义为其他的函数名,但这样对整个工程来说不是件好事,真的比较麻烦
回复 点赞
qqq123 2009年03月21日
好像就是这样。其实暴露隐藏是相对的不是绝对的, Windows内核不是还有undocuments吗!
回复 点赞
lingyin55 2009年03月21日
嗯,C的模块化概念可能就是源文件c和头文件h的一个结合,包含了对一个对象和它相应功能和参数的一个描述。
对于包含了h的源文件,它里面的接口函数如果没有特别声明的话,其它c文件也是可以调用的。
c和面向对象的其它语言模块化的设计思想是一样的,c的模块化设计要求也是功能要单一,对象要明确,要知道哪些是可以提供给其它文件调用的接口,哪些不能,然后通过在源文件的头部声明为static实现。注意这里的static类型声明应该是在源文件头部声明,而不是在头文件声明。对于提供给其它源文件调用的数据或者函数,则可以通过在h文件用extern声明。
回复 点赞
lingyin55 2009年03月21日
嗯,C的模块化概念可能就是源文件c和头文件h的一个结合,包含了对一个对象和它相应功能和参数的一个描述。
对于包含了h的源文件,它里面的接口函数如果没有特别声明的话,其它c文件也是可以调用的。
c和面向对象的其它语言模块化的设计思想是一样的,c的模块化设计要求也是功能要单一,对象要明确,要知道哪些是可以提供给其它文件调用的接口,哪些不能,然后通过在源文件的头部声明为static实现。注意这里的static类型声明应该是在源文件头部声明,而不是在头文件声明。对于提供给其它源文件调用的数据或者函数,则可以通过在h文件用extern声明。
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告