|
发表于 2005-8-17 13:18:40
|
显示全部楼层
Post by gamedragon
我觉得*nix用C一是为了跨平台(毕竟不是所有平台上都有C++编译器的),二是为了效率(毕竟C比C++的效率要来的高一些,C++的Template、try、catch可以让你的代码体积和运行效率发生不可预知的变化),在操作系统这种要求效率的场合,C还是更胜任一些的。而且用C一样可以实现OO的思想。
GTK+用C应该是为了更好的被其他工具封装,据我所知就有pyGtk、wxGtk等多种封装。QT好像没这么多吧。
顺便发句牢骚:C++变得越来越庞大复杂,搞不清楚这样倒底是给人带来方便还是让人越来越难用。至少调试C程序比调C++的方便一千倍。
不过STL是个好东西。
对于C++和C来说, 效率取决于数据结构和算法以及编译器的实现, 往往C的初手写的
代码效率不怎样.
UNIX一系列一直都是C一统天下, 而且C++的标准出来比较晚, 而且语法比C复杂了不止一倍
两倍, 高手用C++能写出简洁高效漂亮的代码, 可惜绝大部分人都不是C++高手。
其实觉得大部分人也不是C高手。
C99增加了一些挺好玩的东西,估计现在学校里教学的C还是C89,常用的还是VC6,抑或元老级的TC2/3。。。。
这几天看到一段宏,挺好玩的:
extern int add(int x, int y);
#define add(...) (trace("add(%d, %d)\n", __VA_ARGS__), add(__VA_ARGS__))
#define trace(...) (fprintf(stderr, "[%s:%d:%s]", __FILE__, __LINE__, __func__), \
fprintf(stderr, __VA_ARGS__), fflush(stderr))
这样在调用add(1, 2)时会打印出跟踪信息:
[hello.c:24:main]add(1, 2)
好处是不用修改.c文件就可以知道在什么地方调用了add,参数是什么。 |
|