對於程式語言來說,經常看到有因為各自支持的語言陣營而互懟的,其實根本沒那個必要,都只是一種工具而已。當多數主流語言都會使用時也許你就不會有偏見了,本質不過都是用來描述計算機的一個任務,只是每門語言設計時考慮的側重點不一樣而已。大家最好不要停留在語言層面去爭執,不如把時間花在計算機實現原理和結構的本質上,這樣更能理解程式語言每一行描述的東西在計算機是幹什麼的。本系列將總結現在IT領域主流的那些程式語言的相關知識。
C語言是最經典的語言,很多其他語言的運行環境也是用C來寫的,對於寫程序的人則能不懂C語言呢!提到C首先必然會讓人關聯到指針,當年在大學讓你困惑的指針卻是C語言威力無窮的基礎。C語言可能從更高層面的設計和編寫效率上有所欠缺,但卻足夠經典且容易操控底層。指針雖然風險不小,但卻十分強大。此外ANSI C也增強了C程序在不同作業系統的遷移性,下面列一些C語言的一些基礎知識。
編寫好的C程序需要先編譯成可執行的機器指令才能運行,這便是翻譯工作。翻譯的主要步驟是編譯和連結,編譯就是原始碼到目標代碼,而連結是將各個目標文件連結起來從而形成一個可執行的程序,當然連結器也會引入被程序所用到的所有標準C函數庫的函數。有時編譯過程還會將預處理作為一個階段,它主要是對源文件進行一些處理,比如將include指定的文件內容填充進來。下面是使用gcc來編譯並連結的例子,經過編譯和連結後得到可執行程序,這兩個步驟通過gcc來完成,命令為gcc hello.c -o hello,最終運行./hello會輸出「hello world」。
34;hello world&include<stdio.h>int main(){ printf(&34;);}複製代碼
我們直接使用如下的gcc命令對其進行編譯,而且不帶任何參數,此時將生成一個名為out.a的可執行文件,通過./a.out能夠輸出「hello world」。
gcc hello.c複製代碼
假如添加name.h/name.c和adder.h/adder.c兩對頭文件和源文件,而且將hello.c稍作修改,三個文件代碼分別如下。
//name.hchar* get_name();//name.cchar* get_name() { char* name = &34;; return name;}複製代碼
//adder.hint add(int a, int b);//adder.cint add(int a, int b) { return (a + b);}複製代碼
//hello.cinclude <stdlib.h>include&34;34;name.h&34;hello world&34;%s%s&34;%s\n&34;a + b = %d\n&34; 39; () * + , - . / :; < = > ? [ ] \ ^ _ { } | ~複製代碼
空格、水平制表符、垂直制表符、換行、換頁複製代碼
C語言提供的注釋方式有兩種:以/*開始而以*/結束來注釋多行代碼,以//開始來注釋單行代碼。一般來說對源碼中進行注釋則意味著編譯時會被預處理器清除掉,用空格來替代。
/*第一種注釋方式*///第二種注釋方式複製代碼
標識符就是我們開發人員對變量、函數、類型、結構體、宏等等的起名,C語言也要求我們要按照它的規定來取名。按照規定,標識符可以由英文大小寫字母(A~Z, a~z)、阿拉伯數字(0~9)、和下劃線(_)組成。需要注意以下幾點:
當然C語言還保留了32個特殊的關鍵詞,我們命名的標識符不能與它們相同,否則就會報錯。這32個關鍵詞如下: