《The C Programming Language》讀書筆記3

來源:互聯網
上載者:User

第三章:當好機器的老闆

 

   無論什麼時候我們都不該忘記我們是在學一門語言,而學語言的基本要求是:準確無誤的用它來表示自己的意圖,不僅要讓機器讀懂,也要讓別人(只要他會c語言)讀懂你的意思。記住,語言是用來交流的,不論是程式設計語言還是自然語言。現在讓我們對這兩個交流的對象分別作個分析,如何才能讓他們明白你想幹什麼,打算怎麼幹。

  對於機器來說,我們要做的相對要簡單點,程式設計語言的文法比自然語言要簡單的多了,一切都由順序、選擇、迴圈三種結構複合而成,初學者要做的只是走一個“抄寫-改寫-模仿-習慣”的過程而已。等這些語句成了你的習慣那就太好了,就像你說漢語的時候不會去考慮你用的是陳述句還是感歎句,呵呵,(這個讓我想起了我糟糕的英語,汗~~~)。當然我們對機器要做的遠遠不止這些,讓機器讀懂這隻是第一步而已,如何讓機器按照我們的意思啟動並執行更好、更快才是我們要追求的境界,當然,這個境界沒有止境。得在經驗中慢慢積累,下面只是提出幾個個人的建議而已:

第一.    盡量使用局部變數。因為c語言有個特點,在同個域中的變數必須定義在所有處理語句之前(分程式[o1] 除外),這意味著在程式開始的時候就必須分配好所有的靜態空間,而很多資料在程式中用很少,因此我們需要減少這些不必要的開銷,靈活運用分程式可以將這些對象進一步局部化,比較下面兩段代碼:

Code1:

#include "stdio.h"

#include "stdlib.h"

int main()

{

    int ix;

    char c;

    scanf( "%c", &c );

    if( c == 'y')

     {

        ix = 100;

        printf( "this is %d! /n", ix );

     }

   

    system( "pause" );

      return 0;

}

Code2

#include "stdio.h"

#include "stdlib.h"

int main()

{   

    char c;

    scanf( "%c", &c );

    if( c == 'y')

     {

        int ix = 100;

        printf( "this is %d! /n", ix );

     }

   

    system( "pause" );

      return 0;

}

你會發現如果我們不輸入‘y’系統就沒有必要為ix分配空間。

 

第二,注意和正視一些看起來像bug的語言特性,比如switch語句,可以說從c語言建立的那天起對他的爭論就沒有停止過,它的向下穿越給我們帶來了不少麻煩。以至於在《c專家編程》的第二章中把它說成是“多做之過“,但是我們發現有時候它的功能還是不可代替的,比如判斷一個數是否屬於某個離散集合:

#include "stdio.h"

#include "stdlib.h"

int main()

{   

    int i;

    while( scanf( "%d", &i ) != EOF )

    {

        switch( i )

        {

          case 1: case 2:

          case 3: case 5:

          case 8: case 13:

          printf( "yes!/n" );

          break;

          default :

          printf( "no!/n" );

          break;

        }

    }

   

    system( "pause" );

      return 0;

}

呵呵,這個數列大家都熟悉,但是除了switch語句你能找到比他更簡潔的表示方法嗎?但這正是運用了語句的向下穿越性啊。goto語句也有類似的情況,只要我們仔細研究,這些看起來很麻煩的東西都會變得非常美好。

好了,對機器的交流我們就說到這兒吧。在下次筆記中我們將談談和人的交流-程式的風格問題。

 [o1]也叫複合陳述式

(本文首載於第二是書店)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.