《C缺陷与陷阱》读后感-0

来源:互联网 发布:飞思卡尔单片机 区别 编辑:程序博客网 时间:2024/05/17 07:02

    为找工作,前段时间把C语言仔细温习了遍,还草草地看了遍《程序员面试宝典》,加之毕业设计中写了些自以为值得称赞的程序,以为自己对C语言已经有了良好的把握。不过,在刚刚看了两章《C缺陷与陷阱》后,才发现自己的认识是多么的肤浅,才发现C语言的高深莫测,也更加加深了这样的理念:任何事情都有不断深入的必要和要求。同时,为了加深认识,也为练习文字能力,现将主要认识总结如下。

    1.C语言是人与计算机交流的语言,中间有个编译器做翻译的工作。是语言就有语法,那么,为了达到可靠、有效的交流,就必须深刻理解该语言的语法规则,否则,难免出错。C语言的语法有什么规范、要注意些什么呢?就我目前的认识水平可以总结如下:
    C语言规则不难掌握,难就难在避免自己的程序被编译器给翻译成其他程序!其实,本质还是语法规则把握的不够深刻。就像你会英语,但是不能确保交流中不产生歧义一样,说来说去还是基本功不扎实。那么,有哪些需要多加注意的呢?就我目前的认识水平,可以总结如下:为防止编译器的误解,写程序时要关注的符合有:() ++ -- ;还有符合的优先级和结合方向。
    2.归纳、递推、抽象能力在C语言中的运用。任何工具,如果想运用自如,达到一个高的水平,必然要求对该工具的认识是高层次的,是深刻的,也就是抽象的,可以达到哲学的程度。现将书中例子列出一二如下:
    

  1. (*(void(*)())0)();

       懂吗?第一次看见时,我也不懂。
     分析步骤我就不写了,原则是运用上述归纳、递推、抽象能力。具体含义是:这是个语句,进行函数调用,函数地址为0,函数类型为void()。其中:

  1. void(*)())0

    是对0地址进行强制类型转换,转换为函数指针,指向的函数无返回值无参数。

     

  1. typedef void(*Function-pointer)();

     懂吗?
    分析步骤我也不再写了,原则还是运用上述归纳、递推、抽象能力。具体含义是:用typedef定义了一个新的数据类型(这个表示可能不准确)Function-pointer,它是一个指针,一个函数指针,指向的函数无返回值无参数。
    上述2条语句结合起来可如下运用来简化程序编写:   

  1.     typedef void(*Function-pointer)();
  2.     (*(Function-pointer)0)();等同于(*(void(*)())0)();

        比这更复杂的还有很多,有兴趣的可以了解下。

       好了,就这吧。总结起来有两点认识:加强认识;抽象。




 

原创粉丝点击