如何有效地在C语言的环境下使用结构化编程

Naugineer 2012-01-19 08:35:20
在大型C语言程序中,势必需要把一组组内聚的函数组成一个个的模块,进行封装。但是C语言本生不支持模块的概念,需要使用一些额外的编程的约定。请问,各位有什么好的意见吗?
比如模块级变量如何对模块外进行隐藏?存在多个.c源文件的模块内数据如何共享?模块对外的接口如何定义?
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Naugineer 2012-01-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq120848369 的回复:]

要暴漏的就extern,不暴漏的就static,这有什么。。。
[/Quote]
是的,我发现我们这边很多老的代码,缺乏“暴漏”的概念。将大量的模块变量,都暴露给了整个工程,导致,程序的维护性,可读性很差
Naugineer 2012-01-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 daviddb7 的回复:]

其实就是个概念,文件可以当成模块来用。
把模块内的函数全部做成static,并且声明也放在c文件里
仅把外部接口函数放在头文件里
变量也是类似的,模块内部的全部用static限制在本文件内
模块间的数据共享可以通过get/set函数进行,其它模块通过get/set函数访问模块内部的数据。

如果模块很大,需要多个源文件组成,思想也是类似的。
对外的头文件仅提供接口函数,其它的声明放……
[/Quote]
非常感谢您的回答。
我工作中接触到很多大规模的C语言的工程。但发现我们公司的工程大量泛滥的采用全局变量(extern)来传递数据。使得程序的维护和扩展性很差,也很难阅读。我在阅读Code Complete(代码大全)时,有提到C语言本身并没有模块的概念,但是,就像您说的那样,可以采用一些附加的编程规范来实现这一理念。
您的回答对我的帮助很大。
谢谢
飞天御剑流 2012-01-20
  • 打赏
  • 举报
回复
楼主可参考《C++大规模程序设计》一书,虽然语言是C++,但一样介绍了模块化的组织架构。
daviddb7 2012-01-20
  • 打赏
  • 举报
回复
其实就是个概念,文件可以当成模块来用。
把模块内的函数全部做成static,并且声明也放在c文件里
仅把外部接口函数放在头文件里
变量也是类似的,模块内部的全部用static限制在本文件内
模块间的数据共享可以通过get/set函数进行,其它模块通过get/set函数访问模块内部的数据。

如果模块很大,需要多个源文件组成,思想也是类似的。
对外的头文件仅提供接口函数,其它的声明放在自己的头文件里,不对外提供。
方式可以是这样:对外的头文件放在include目录内,make时加入-I;对内的头文件直接放在source目录下,其它模块搜索不到,自然无法引用。

当然这都需要一定的编码规范来限制,C语言本身是做不到的。
黑压压AiKoder 2012-01-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq120848369 的回复:]
要暴漏的就extern,不暴漏的就static,这有什么。。。
[/Quote]
up
qq120848369 2012-01-20
  • 打赏
  • 举报
回复
要暴漏的就extern,不暴漏的就static,这有什么。。。
AnYidan 2012-01-19
  • 打赏
  • 举报
回复
具体问题具体分析,看你侧重什么?
c++ 也为数据的封装付出了些许效率上的代价
mingchaoyan 2012-01-19
  • 打赏
  • 举报
回复
这个问题提得好有深度~~~

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧