搜索
bottom↓
回复: 68

用面向对象的思路进行C语言开发

  [复制链接]

出0入0汤圆

发表于 2016-5-5 14:33:44 | 显示全部楼层 |阅读模式
以前写单片机程序的时候,基本就是自己想怎么写就怎么写,很好考虑架构,文件组织等内容。当然当初也只是新手,现在从事汽车电子,突然发现ECU的代码那是相当的严谨,漂亮(我指的是手工代码,非自动代码)。同时这种代码让你看起来非常头疼,因为用到了大量的结构体,封装等。确实有点面向对象的味道。想想以前用结构体的时候基本是用来做协议或者状态机的。我也可以毫不客气的讲,即使公司的代码被泄露出去,那些阅读源代码的人也是异常头痛。层层的封装往往让你看了后面忘了前面。

因此也就想来问问各位码农同学,平时你们在写C代码的时候,是否考虑过面向对象的思路。大家都是怎么玩C的。附件貌似是从论坛里搞来的,这里在粘贴一下,里面就是介绍C语言面向对象的思路。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2016-5-5 14:56:00 | 显示全部楼层
现在写C,也是大量使用结构体,宏定义,层层封装,有点点面对对象的味道吧,把一个对象有的参数放进结构体封装起来,用起来很方便

出0入0汤圆

发表于 2016-5-5 15:10:08 | 显示全部楼层
函数,封装,define 常量

出0入0汤圆

发表于 2016-5-5 15:15:13 | 显示全部楼层
为何不直接使用C++开发呢

出0入0汤圆

发表于 2016-5-5 15:22:00 | 显示全部楼层
尽量不要直接用指针操作内存

出0入0汤圆

发表于 2016-5-5 15:26:09 | 显示全部楼层
是否是这样,先学习学习

出0入0汤圆

发表于 2016-5-5 15:28:29 | 显示全部楼层
层层封装,只留几个函数接口,内部函数对外不可见,这样结构比较清晰。

出0入0汤圆

发表于 2016-5-5 15:55:29 | 显示全部楼层
为什么不用c++呢

出0入0汤圆

发表于 2016-5-5 16:12:46 | 显示全部楼层
函数,封装,define 常量

出0入0汤圆

发表于 2016-5-5 16:58:37 | 显示全部楼层
没用过很复杂的

出0入8汤圆

发表于 2016-5-5 17:17:48 | 显示全部楼层
单片机这种级别的,资源少,实现的功能也比较简单,封装好各个功能模块,C就够了,C++的类继承等概念根本就不需要用到。

出90入0汤圆

发表于 2016-5-5 18:50:55 来自手机 | 显示全部楼层
现在写程序也都把一个对象的几个参数封装成结构体,比较不会乱~

出0入0汤圆

发表于 2016-5-5 21:41:14 | 显示全部楼层
好资料,非常感谢。

出0入0汤圆

发表于 2016-5-5 22:27:20 | 显示全部楼层
面向对象是一种好思想

出0入0汤圆

发表于 2016-5-5 23:30:04 | 显示全部楼层
好资料,非常感谢。

出0入0汤圆

发表于 2016-5-6 03:08:34 | 显示全部楼层
怎么说呢?这种做法搞来搞去,是研究编程语言去了,而不是做实际项目。
这当然在相对大型的或多人协作方面有好处,但这样不如直接用C++还方便。
C语言本是面向结构的,要面向对象比较吃力。

出0入0汤圆

发表于 2016-5-6 03:24:43 来自手机 | 显示全部楼层
标记下~

出0入0汤圆

发表于 2016-5-6 08:51:44 | 显示全部楼层
rain73 发表于 2016-5-6 03:08
怎么说呢?这种做法搞来搞去,是研究编程语言去了,而不是做实际项目。
这当然在相对大型的或多人协作方面 ...

感觉这个说的靠谱

出0入0汤圆

发表于 2016-5-6 09:39:46 | 显示全部楼层
gsq19920418 发表于 2016-5-5 15:10
函数,封装,define 常量

以前编程变量到处定义,现在也喜欢这种风格,使用起来非常方便

出0入12汤圆

发表于 2016-5-6 09:45:13 | 显示全部楼层
做大软件项目可以考虑,小点的就算了。

出0入0汤圆

发表于 2016-5-6 09:46:44 | 显示全部楼层
现在写C代码,都是模块化,也会封装(为了让人一眼明了),没有深入那么深。

出0入0汤圆

发表于 2016-5-6 09:59:33 | 显示全部楼层

您有用过吗?好用吗?N年前听说编译效果差了点,不知道现在有没有好一些?

出0入0汤圆

发表于 2016-5-6 10:07:44 | 显示全部楼层
支持,封装太厉害了,看的头大

出0入0汤圆

发表于 2016-5-6 10:22:44 | 显示全部楼层
liupanliang 发表于 2016-5-6 10:07
支持,封装太厉害了,看的头大

理解了头就不大了,呵呵!

出0入0汤圆

发表于 2016-5-6 11:42:56 | 显示全部楼层
谢谢分享。。。

出0入0汤圆

发表于 2016-5-6 12:12:53 | 显示全部楼层
大型协议,都是一层层的封装

出0入0汤圆

发表于 2016-5-6 17:28:49 | 显示全部楼层
wangpengcheng 发表于 2016-5-6 09:59
您有用过吗?好用吗?N年前听说编译效果差了点,不知道现在有没有好一些? ...

现在的项目写stm32都是用的C++ 用起来很好用的
至于编译效果差完全是不懂语言特性然后乱用特性导致的
mdk编译器部分支持C++11

出0入0汤圆

发表于 2016-5-8 11:10:10 | 显示全部楼层
日日♂夜夜 发表于 2016-5-6 17:28
现在的项目写stm32都是用的C++ 用起来很好用的
至于编译效果差完全是不懂语言特性然后乱用特性导致的
mdk ...

部分支持是什么意思?需要配置吗?还有如果跟一些系统一起用的话会有问题吗,因为系统大部分都是c

出0入0汤圆

发表于 2016-5-8 19:22:56 | 显示全部楼层
wangpengcheng 发表于 2016-5-8 11:10
部分支持是什么意思?需要配置吗?还有如果跟一些系统一起用的话会有问题吗,因为系统大部分都是c ...

C++03 基本支持  C++11之支持部分关键字  具体看帮助文档 不过一般也用不到这么多特性
要是和以前的程序一起使用要注意 C和C++混合编程的链接问题 这点和VC上的是一样的
比如ucos 头文件里面已经做好了转换 直接可以使用在c++文件里面
简单的来说就是 extern"C"{}  你可以百度一下

出0入0汤圆

发表于 2016-5-8 21:27:58 | 显示全部楼层
现在写程序各种结构体,各种宏。有时把函数的指针也放进结构体

出0入0汤圆

发表于 2016-5-8 23:19:39 来自手机 | 显示全部楼层
学习了,觉得只有能够熟练的而且有意识的使用结构体了,才能成为高手

出0入0汤圆

发表于 2016-5-8 23:31:54 | 显示全部楼层
面向对象还没具体学过,总用结构体、宏定义、指针操作

出0入0汤圆

发表于 2016-5-8 23:55:11 | 显示全部楼层
还是小心。 很多C编译对指针支持都不好。

出0入0汤圆

发表于 2016-5-9 00:25:59 来自手机 | 显示全部楼层
机智云的工程模板就如同楼主所言,新手很难看懂!虽说是小电工一个,C基本功也是常练习,多阅读代码

出0入0汤圆

 楼主| 发表于 2016-5-9 12:37:06 | 显示全部楼层
笑笑我笑了 发表于 2016-5-5 15:22
尽量不要直接用指针操作内存

我们这儿用的多是指针常量来处理

出0入0汤圆

 楼主| 发表于 2016-5-9 12:39:55 | 显示全部楼层
落叶随风 发表于 2016-5-5 14:56
现在写C,也是大量使用结构体,宏定义,层层封装,有点点面对对象的味道吧,把一个对象有的参数放进结构体 ...

我们这儿除了大量的结构体,还有大量的函数指针,将其封装在结构体中,然后再用函数名来初始化,这样调用的时候用这个指针就行了。结果就是你看程序会异常的头疼麻烦,有时候很难找到函数的原型。

出0入0汤圆

 楼主| 发表于 2016-5-9 12:42:31 | 显示全部楼层
creep 发表于 2016-5-5 15:15
为何不直接使用C++开发呢

汽车电子控制,例如BCM,ECM,CCU等控制单元哪有用C++的。其他嵌入式领域我不知道,我一直认为C++的QT用来做什么显示啊会话神马的,真正的驱动部分肯定还是用C

出0入0汤圆

 楼主| 发表于 2016-5-9 12:44:14 | 显示全部楼层
zhuozz 发表于 2016-5-8 21:27
现在写程序各种结构体,各种宏。有时把函数的指针也放进结构体

嗯,函数指针在我们这儿是经常放入结构体的,然后这些结构体由封装到其他结构体中,一层一层的,会让人崩溃。

出0入0汤圆

 楼主| 发表于 2016-5-9 12:46:08 | 显示全部楼层
w282529350 发表于 2016-5-6 12:12
大型协议,都是一层层的封装

嘿嘿,同感同感。在追踪的时候经常忘了,卧槽我上一个是什么来着。

出0入0汤圆

发表于 2016-5-9 13:02:44 | 显示全部楼层
BSMGood 发表于 2016-5-9 12:39
我们这儿除了大量的结构体,还有大量的函数指针,将其封装在结构体中,然后再用函数名来初始化,这样调用 ...

是的,有根据不同命令头进行不同功能处理的那些函数,就直接做成表了,封装进结构体

还有些相同功能不同芯片的驱动的接口,也是函数指针,封装在结构体里。

出0入0汤圆

发表于 2016-5-9 13:50:29 | 显示全部楼层
面向 对象 编程 。

这个太难了吧。

很多电工都没有对象呢?


出0入0汤圆

发表于 2016-5-9 13:51:21 | 显示全部楼层
以前高通的brew,就是用的这种object C的方式构建的。
C++完成逻辑层,接口层还是用C来写。

出0入0汤圆

发表于 2016-5-9 14:04:02 | 显示全部楼层
公司用C,模块化编程,还是面向过程
自己项目用C++,面向对象,非常舒服

出0入0汤圆

发表于 2016-5-9 15:20:15 | 显示全部楼层
mathison 发表于 2016-5-9 13:50
面向 对象 编程 。

这个太难了吧。

出0入0汤圆

发表于 2016-5-9 15:40:58 | 显示全部楼层
好东西,下载了

出0入0汤圆

发表于 2016-5-9 17:18:15 | 显示全部楼层
好东西,先收藏学习

出0入0汤圆

发表于 2016-5-11 16:55:49 | 显示全部楼层
现在都是用结构体和DEFINE

出0入0汤圆

 楼主| 发表于 2016-5-12 13:24:15 | 显示全部楼层
mathison 发表于 2016-5-9 13:50
面向 对象 编程 。

这个太难了吧。

我该怎么想呢电工没有对象。是不知道对象还是DSG的意思???

出0入0汤圆

发表于 2016-5-12 13:36:54 | 显示全部楼层
现在都是c和c++混合使用,至于对象么。。一会有一会没有

出0入0汤圆

发表于 2016-5-12 13:53:36 | 显示全部楼层
平时编程也是有融入面向对象的思想,使用函数指针其实就是C++的多态,主要用于隔离了变化。

出0入0汤圆

发表于 2016-5-12 16:48:17 | 显示全部楼层
很厉害的感觉,看LWIP,图片解码的源码也是用类似的

出0入0汤圆

发表于 2016-5-13 10:07:48 | 显示全部楼层
面向对象的 C  

出0入0汤圆

发表于 2016-5-13 10:09:25 | 显示全部楼层
何必执念于此啊

出0入0汤圆

发表于 2016-5-13 17:23:37 | 显示全部楼层
谢谢分享!!!

出0入0汤圆

发表于 2016-5-15 22:33:10 | 显示全部楼层
跟一个,凌明版的嵌入式C语言书箱

出0入0汤圆

发表于 2016-5-15 22:36:11 | 显示全部楼层
老徐 发表于 2016-5-15 22:33
跟一个,凌明版的嵌入式C语言书箱

抱歉,软件超过16M传不上来

出0入0汤圆

发表于 2016-5-15 22:37:07 | 显示全部楼层
这个思路不错!

出0入0汤圆

发表于 2017-2-2 20:50:26 | 显示全部楼层
思路不错!

出0入0汤圆

发表于 2017-2-3 00:28:27 | 显示全部楼层
>为什么不用c++呢
No C++ Compilor for most of the MCU.

出0入0汤圆

发表于 2017-2-11 14:50:39 | 显示全部楼层
感谢楼主分享~~

出0入0汤圆

发表于 2017-2-11 14:52:44 | 显示全部楼层
英文的。。。。

出0入0汤圆

发表于 2017-2-11 22:02:12 来自手机 | 显示全部楼层
封装后移植和用起来确实方便很多,只是,看别人的代码会困难好多,一层层剥

出0入0汤圆

发表于 2017-2-15 08:52:13 | 显示全部楼层
最近几个项目都使用QP事件驱动框架,里面的核心就是使用C语言实现面向对象思想,然后加上QM自动生成代码工具,只要画图维护状态在一般的不是非常复杂的项目中已经非常不错,避免直接深入源码,只要懂状态机就基本上可以玩的转。

出0入0汤圆

发表于 2017-2-15 09:10:44 | 显示全部楼层
学习下……

出0入0汤圆

发表于 2017-2-15 09:45:55 | 显示全部楼层
大量的结构体  不过最主要是调试的时候方便  不用满世界找变量  

出0入0汤圆

发表于 2017-2-15 10:01:59 | 显示全部楼层
有没有人搞一个例子,来学习一下   ,分层分得好,也容易上手

出0入0汤圆

发表于 2018-12-19 09:24:25 | 显示全部楼层
学习一下C语言的面向对象,总感觉自己写的程序比较乱。

出0入0汤圆

发表于 2018-12-19 11:02:31 | 显示全部楼层
今天用左手,明天用右手,每天都有换妻的感觉!
还怕没对象?

出0入0汤圆

发表于 2018-12-19 12:18:31 来自手机 | 显示全部楼层
ST的代码生成器都改回不用面向对象了,还折腾这干嘛?软件要的稳定精简,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-29 05:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表