提倡用C++和C混合编程。
在一个项目中(基于ZLG提供的软件模板),我开始写一个应用程序时,用了太多全局变量,有人认为程序结构不够紧凑,向我提出,尝试用结构体和函数指针结合的方法,用C语言写出面向对象风格的代码。
在修改过程中,我尝试了使用C++和C混合编程的方法实现面向对象的方法,而不使用结构体和函数指针结合的方案,因为C++中类的封装性、继承性比结构体好得多,是面向对象编程更加“正统”的方法。(当然,在C语言下也可以对结构体进行“继承”,即把旧结构体作为新的结构体的成员)。
实现的方法很简单,就是把需要用C++写的代码的源程序后缀名换成.cpp就可以了,ADS本来有C++的编译器,如图1所示,把传统的main.c改成main.cpp。 https://bbs.21ic.com/upfiles/img/200711/2007112515951314.jpg图1
但如果编程是基于模板的,比如ZLG的模板全部是C语言写的,*.cpp是不可以直接使用*.c中的函数的。但看来ZLG的工程师们早就考虑到了这点,看图2,ZLG的模板中的config.h文件包含了extern "C",通知*.cpp导入模板中*.c写成的各种驱动函数。 https://bbs.21ic.com/upfiles/img/200711/20071125151143542.jpg图2
ADS软件为C++编程提供了丰富的向导和浏览工具,这也是提倡用C++写程序的原因之一。看这个类观察窗口,图3,成员变量、成员函数一目了然,这个浏览器还能像VC++一样向导生成类、继承类、生成新的成员变量和函数。 https://bbs.21ic.com/upfiles/img/200711/20071125151229462.jpg
使用C++编程,我们的各种应用程序都可以封装成类的形式,要想改进前人的驱动,就继承以前的类,结构清晰,不像现在有的程序N个工程师改,往往都是面目全非,错一处弄死人(封装性差的结果)。比如图4,就是ADS提供的继承关系图表,先有“基础类”,再派生出“应用类”,清清楚楚。 https://bbs.21ic.com/upfiles/img/200711/20071125151326125.jpg图4
总之,C++和C混合编程,简单易行,好处多多,值得推广! |