c++ vs c

ma100 2012-03-05 12:28:30
有人说c好, c++不如c高效,易学, 如linux的作者
有人推崇c++,说比c强大,安全, 执行效率不比c差
我个人的观点是都对, 在c++失去安全, 强大时不比c慢, 不安全,不强大的c程序是失败的

先说安全性:
我认为安全性分两种, 一种是编译器做的, 如同样的程序c++编译器的waring可能多,这种我觉得和语言完全没关系
是因为c的编译器优化频率没有c++快
另一种是语法级别的,比如公有变量,私有变量
语法级别上其实用c也可以解决, 如私有变量/函数, 在声明前加static就可以保证只在文件内有效,当然一个功能要一个文件,不要一个文件里写很多功能

再说强大,c++比c多的特性是什么, 封装, 继承,多态, 他们同样可以用c的语法实现
先说封装,c本身有结构体可以封装变量, 成员函数的话用函数指针即可, 如下例

#include <stdio.h>
struct A
{
void (*pfun) ( void );
}p;

void fun ( void )
{
printf("OK");
}

int main()
{
p.pfun=fun;
(*p.pfun)();
return 0;
}


这里pfun相当于public成员函数, 如果是private的则不要声明函数指针, 直接在当前文件里写一个static 函数
此外还要"一个类"一个文件

再说继承:
同样可以用函数指针搞定

最后多态:
其实还是函数指针, 在"基类"里写指针, 在派生类里写各个函数, 在调用的时候加判断
if ( 派生类1 )
fun1();
else
...






最后可以看出, c++就是给c穿了一件衣裳而已, 把一些丑陋的繁琐的失去交由编译器去干
而如果想写一个好的程序, 这件衣服是必不可少的, 无论是编译器做还是手工做
...全文
201 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
灼眼的超哥 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 baichi4141 的回复:]

引用 3 楼 liuchao35758600 的回复:

引用 1 楼 liuchao35758600 的回复:

最近我在结构体(假设为ss)里保存函数指针(假设为func),使用这个函数指针时,编辑器显示的提示是:
C/C++ code

ss::func()


原来这样和C++里的 XXX::XXX 一样。

不知道你用的是什么编译器
我不记得C语言里有结构体自……
[/Quote]
自定义结构体,里面声明个函数指针变量,之后,程序对这个结构体进行修改,让这个函数指针指向自定义的函数。
灼眼的超哥 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 baichi4141 的回复:]

引用 3 楼 liuchao35758600 的回复:

引用 1 楼 liuchao35758600 的回复:

最近我在结构体(假设为ss)里保存函数指针(假设为func),使用这个函数指针时,编辑器显示的提示是:
C/C++ code

ss::func()


原来这样和C++里的 XXX::XXX 一样。

不知道你用的是什么编译器
我不记得C语言里有结构体自……
[/Quote]
gcc编译器 + 普通的代码编辑器。
gold_water 2012-03-05
  • 打赏
  • 举报
回复
每种语言存在都有其价值,都有起所擅长的地方
baichi4141 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuchao35758600 的回复:]

引用 1 楼 liuchao35758600 的回复:

最近我在结构体(假设为ss)里保存函数指针(假设为func),使用这个函数指针时,编辑器显示的提示是:
C/C++ code

ss::func()


原来这样和C++里的 XXX::XXX 一样。
[/Quote]
不知道你用的是什么编译器
我不记得C语言里有结构体自带函数
C++里面的结构体就是默认公有权限的类,之所以保留结构体这个词是为了和C兼容
东莞某某某 2012-03-05
  • 打赏
  • 举报
回复
楼上所言极是,这是这个原有,才使C++ C各有各的主场。
灼眼的超哥 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liuchao35758600 的回复:]

最近我在结构体(假设为ss)里保存函数指针(假设为func),使用这个函数指针时,编辑器显示的提示是:
C/C++ code

ss::func()


原来这样和C++里的 XXX::XXX 一样。
[/Quote]
muyi66 2012-03-05
  • 打赏
  • 举报
回复
对于OS核心来说,运行效率要求无比重要,其它的东西都得让道。所以linux的作者会说C更好——其实他没说汇编更好我都感到很奇怪了,大概是为了可移植吧。呵呵

对于小程序来说,反正不会有代码复用以及未来维护问题,用C简单解决岂不是比写一堆的C++类代码更好很多?

但要是系统够大,要是代码复用要求够多,要是未来的维护问题严重,而且其实运行效率要求并不变态。那,我不相信谁会死抓住C不放,宁肯付出无数倍的代价也绝不用C++......
灼眼的超哥 2012-03-05
  • 打赏
  • 举报
回复
最近我在结构体(假设为ss)里保存函数指针(假设为func),使用这个函数指针时,编辑器显示的提示是:

ss::func()

原来这样和C++里的 XXX::XXX 一样。
赵4老师 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 cuiy0001 的回复:]
引用 9 楼 zhao4zhong1 的回复:

记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”

“用木材砖头已经盖好的房千万不要拆了用钢筋水泥重建!”


这句话一直是赵牛在说。
[/Quote]
“因为发生地震的时候被钢筋水泥房砸死的人比木材砖头房多!”
“因为发生错误的时候被C++程序弄晕的程序员比C程序多!”
(^_^)
  • 打赏
  • 举报
回复
呃 MPL 咋个模拟法?
序员 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhao4zhong1 的回复:]

记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”

“用木材砖头已经盖好的房千万不要拆了用钢筋水泥重建!”
[/Quote]

这句话一直是赵牛在说。
赵4老师 2012-03-05
  • 打赏
  • 举报
回复
记不得哪位C++大牛在哪本学习C++的书的前言里面说过
“用C语言1000行源码能完成的工作千万不要用C++重写!”

“用木材砖头已经盖好的房千万不要拆了用钢筋水泥重建!”

15,447

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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