一提到C语言,在偶这个始终的C语言菜鸟眼里,是个神奇的语言。经过了近半世纪的历史,多少技术湮灭在信息时代的长河中,C语言却依然在TIBOE排行榜中笑傲群雄。

本文是谈.NET开发者看来,C语言有什么特点,我们能从C语言中了解些什么。个人觉得,C++过于复杂了,和.NET走的完全是两条路,对我们没有多大可借鉴启发之处。

操作系统和硬件驱动主要都是C语言编写的,比如Windows系统。C语言可以自由地通过嵌入系统头文件,调用Windows函数,创建窗口,画图操作文件等等。而.NET要调用这些函数,必须像这样声明:

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int MessageBox(HandleRef hWnd, string text, string caption, int type);

user32.dll其实就是对应winuser.h,函数名和参数完全一样。但C#必须先查好或记住这些名称参数,所以显然比C语言待遇低了一级。不过一般情况下,调用这些底层函数都被.NET Framework封装了,比如命名空间System.Windows.Forms下的UnsafeNativeMethods类。

C语言声名着著是其体积和速度,既因其高效,也由于其简单。我们可以体会和现代编程语言原始风味的方案。

C语言为什么那么重视链表,而.NET的LinkList类从没人用过,因为C语言从一个数一个字节地解决问题,而.NET立足于一个个对象

没有异常,就用不同的返回值表示处理结果。 那处理的数据怎么办?用全局变量,或用参数传址。

没有越界检查,保持逻辑正确,程序自助解决,可以利用这点写更精巧用法,比如实现函数的可选参数。这更多地导致了无数缓冲区漏洞等安全问题,想得到高效又要安全,就只有在代码上付出更多。

C语言类型系统十分简单,就是按占字节数,1个是char,2个是short,4个是int。没有枚举和true/false。其实所有变量,所有类型,在C语言视角,都是一个字:数。

没有泛型,反正类型都是数字,传什么都行。

没有委托/事件,有函数指针,至于签名是否匹配,自助解决。

C语言也没有一个各个平台通用的标准库,提供标准的string和集合类型。C语言出现那时,都没有Unicode这种概念。在Windows库中,同义类型泛滥,光表示string的就有好多种,如WCHAR, PWCHAR, LPWCH, PWCH等等。

没有继承,C语言开发在有一些业务逻辑的系统就显得笨拙。

C语言还有一些奇怪的脾气,比如变量和函数声明要放在最前面,函数不能返回指针或数组(因为只在函数栈上可用),久之就习以为常了。相比于现代编程语言,都是组织严密,无懈可击,但觉得似乎千篇一律,少了一点个性。

我建议.NET开发者,如果只上过C语言大学课,无论何时重温一下它的思想,会让你的思维都会变更加全面。

C语言应用领域仍然海阔天空,应用比.NET要广得多,但就不同的每个平台(Win/Unix/Mobile)而言,又要比.NET少得多,跨度要比Asp.NET到WPF开发大得多。所以至少从这方面讲,做C开发不比.NET幸福,但做这种开发的,几乎每个都是精英,一直为这些复杂的网站,管理系统, 各种App背后,默默地提供坚强支持。

寻找C语言和.NET之间的桥梁的更多相关文章

  1. C语言和C++篇

    C语言和C++篇 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的.想想我们至今的代码,到底生成和使用了多少String!标题上所罗列的语言,可以看成 ...

  2. 从C,C++,JAVA和C#看String库的发展(一)----C语言和C++篇

    转自: http://www.cnblogs.com/wenjiang/p/3266305.html 基本上所有主流的编程语言都有String的标准库,因为字符串操作是我们每个程序员几乎每天都要遇到的 ...

  3. CHENGDU1-Python编程语言和PEP8规范

    CHENGDU1-Python编程语言和PEP8规范 PEP8规范6条? 答:PEP8规范说白了就是一种规范,可以遵守,也可以不遵守,遵守PEP8可以让代码的可读性更高. 代码编排:---缩进,4个空 ...

  4. 大数据工具比较:R 语言和 Spark 谁更胜一筹?

    本文有两重目的,一是在性能方面快速对比下R语言和Spark,二是想向大家介绍下Spark的机器学习库 背景介绍 由于R语言本身是单线程的,所以可能从性能方面对比Spark和R并不是很明智的做法.即使这 ...

  5. OWL本体语言和Protege本体编辑器

    OWL本体语言和Protege本体编辑器 演讲稿原作者:Wala Abdulaziz译者:Wu Di (pimgeek)转载.编辑:Tan Liwei原文发布日期:2013年6月5号原文链接:http ...

  6. 很多人都搞不清楚C语言和C++的关系!今天我们来一探究竟为大家解惑~

    最近,身边有许多小伙伴已经开始学习编程了,但是呢,学习又会碰到许多的问题,其中作为新手小白提到最多的问题就是编程语言的选择. 每次遇到这种问题,看起来很简单,但是又有很多小伙伴搞不清编程语言之间的关系 ...

  7. C语言和C++中动态申请内存

      在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h>  ...

  8. [原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)

    原文:[原创].NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇) 前言:上一篇文章讲述了一些实现DAL的理论,本 ...

  9. c语言和java的区别

    今晚读了一下c程序设计语言,这是一本经典书籍,发现C语言和java有很多是相同的,毕竟java是由c语言进化来的. 我大概从我自己的思考来谈谈不同点 1.c语言是面向过程,主要单位是函数,变量和函数的 ...

随机推荐

  1. 从零开始学Linux[一]:基本命令:系统信息、目录、文件、文件编辑

    摘要:linux基础学习:系统信息.目录.文件查找.文件操作.查看文件内容及大小.软链接.VIM使用. 现在Linux的使用非常普遍.对于一个小白来说,满屏幕的字母,看起来就是一头雾水~   目前由于 ...

  2. NRF905 无线模块实验

    ---恢复内容开始--- 采用2440开发板,CON4 不仅包含了很多富余的 GPIO 引脚,还包含了一些其他 CPU 引脚, 如 AD0-AIN3, CLKOUT 等.你所看到的图中的 SPI 接口 ...

  3. JDBC连接mysql数据库,添加数据

    如下:其中添加/删除/修改只是sql字符串不同 //3.要执行的字符串 String sql="INSERT INTO t_student(NAME,age,email) VALUES('x ...

  4. Scrum 项目7.0

    一.内容 1.回顾组织 主题:“我们怎样才能在下个sprint中做的更好?” 时间:设定为1至2个小时. 参与者:整个团队. 场所:能够在不受干扰的情况下讨论. 秘书:指定某人当秘书,筹备.记录.整理 ...

  5. spring使用elasticsearch 5.x

    elasticsearch客户端选择 这里使用transport建立elasticsearch客户端 applicationContext.xml配置,属性可以采用读取属性文件的方式.参考类Prope ...

  6. org.apache.hadoop.security.AccessControlException: Permission denied:

    org.apache.hadoop.security.AccessControlException: Permission denied: user=xxj, access=WRITE, inode= ...

  7. PostgreSQL同步复制搭建

    摘要: PostgreSQL同步复制搭建 一.初始化master节点 1. 安装PostgreSQL 2. 初始化db initdb -D /data/pg940_data 二.配置master节点 ...

  8. c++链表归并排序的迭代版本

    之前用js写了个归并排序非递归版,而这一次,c++封装链表的时候也遇到了一个归并排序的接口.邓老师实现了递归版本的归并排序,但是递归的调用函数栈的累积是很占内存空间的.于是乎,那试试在链表结构上实现以 ...

  9. BQ24296充电管理芯片使用过程中的注意事项

    BQ24296遇到的一点问题 概述:BQ24296是TI出品的具有窄范围VDC控制.基于I2C通讯的最大支持3A充电电流的开关式电源路径管理芯片.可以轻松实现2A以上的大电流充电,能量转换效率达到90 ...

  10. hihoCoder 1385 : A Simple Job(简单工作)

    hihoCoder #1385 : A Simple Job(简单工作) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 Institute ...