本教程對C 語言進行了深入淺出的介紹,從基礎知識到ANSI-C 標准的最新功能,內容涵蓋了從數組,類等基本概念到多態、模板等高級概念。教程本著實用的原則,每一小節都結合了可以工作的程序實例,以便讀者從第一課開始就可以上手實習。
下面我們從一個最簡單的程序入手看一個C 程序的組成結構。
// my first program in C
#include <iostream.h>
using namespace std;
int main() {
cout << "Hello World!";
return 0;
}
顯示結果 Hello World!
上面左側顯示了我們的第一個程序的源代碼,代碼文件名稱為hellowworld.cpp。右邊顯示了程序被編譯執行後的輸出結果。編輯和編譯一個程序的方法取決於你用的是什麼編譯器,根據它是否有圖形化的界面及版本的不同,編譯方法也有可能不同,具體請參照你所使用的編譯器的使用說明。
以上程序是多數初學者學會寫的第一個程序,它的運行結果是在屏幕上打出"Hello World!"這句話。 雖然它可能是C 可寫出的最簡單的程序之一,但其中已經包含了每一個C 程序的基本組成結構。 下面我們就逐個分析其組成結構的每一部分:
// my first program in C
這是注釋行。所有以兩個斜線符號(//)開始的程序行都被認為是注釋行,這些注釋行是程序員寫在程序源代碼內,用來對程序作簡單解釋或描述的, 對程序本身的運行不會產生影響。在本例中, 這行注釋對本程序是什麼做了一個簡要的描述。
# include < iostream.h >
以#標志開始的句子是預處理器的指示語句。它們不是可執行代碼,只是對編譯器作出指示。在本例中這個句子# include < iostream.h > 告訴編譯器的預處理器將輸入輸出流的標准頭文件(iostream.h)包括在本程序中。這個頭文件包括了C 中定義的基本標准輸入-輸出程序庫的聲明。此處它被包括進來是因為在本程序的後面部分中將用到它的功能。
using namespace std;
C 標准函數庫的所有元素都被聲明在一個名空間中,這就是std名空間。因此為了能夠訪問它的功能,我們用這條語句來表達我們將使用標准名空間中定義的元素。這條語句在使用標准函數庫的C 程序中頻繁出現,本教程中大部分代碼例子中也將用到它。
int main()
這一行為主函數(main function)的起始聲明。main function是所有C 程序的運行的起始點。 不管它是在代碼的開頭,結尾還是中間 – 此函數中的代碼總是在程序開始運行時第一個被執行。並且,由於同樣的原因,所有C 程序都必須有一個main function。
main 後面跟了一對圓括號(),表示它是一個函數。C 中所有函數都跟有一對圓括號 (),括號中可以有一些輸入參數。如例題中顯示,主函數(main function)的內容緊跟在它的聲明之後,由花括號 ({})括起來。
cout << "Hellow World!";
這個語句在本程序中最重要。 cout 是C 中的標准輸出流(通常為控制台,即屏幕),這句話把一串字符串(本例中為"Hello World")插入輸出流(控制台輸出)中。cout 在的聲明在頭文件iostream.h中,所以要想使用cout 必須將該頭文件包括在程序開始處。
注意這個句子以分號(;)結尾 。分號標示了一個語句的結束,C 的每一個語句都必須以分號結尾。 (C 程序員最常犯的錯誤之一就是忘記在語句末尾寫上分號) 。
return 0;
返回語句(return) 引起主函數 main()執行結束,並將該語句後面所跟代碼(在本例中為0) 返回。這是在程序執行沒有出現任何錯誤的情況下最常見的程序結束方式。在後面的例子中你會看到所有C 程序都以類似的語句結束。
你可能注意到並不是程序中的所有的行都會被執行。程序中可以有注釋行(以//開頭),有編譯器預處理器的指示行(以#開頭),然後有函數的聲明(本例中main函數),最後是程序語句(例如調用cout <<),最後這些語句行全部被括在主函數的花括號({})內。
本例中程序被寫在不同的行中以方便閱讀。其實這並不是必須的。例如,以下程序
int main ()
{
cout << " Hello World ";
return 0;
}
也可以被寫成:
int main () { cout << " Hello World "; return 0; }
以上兩段程序是完全相同的。
在C 中,語句的分隔是以分號(;)為分隔符的。分行寫代碼只是為了更方便人閱讀。
以下程序包含更多的語句:
// my second program in C
#include <iostream.h>
int main ()
{
cout << "Hello World! ";
cout << "Im a C program";
return 0;
} 顯示結果 Hello World! Im a C program
在這個例子中,我們在兩個不同的語句中調用了cout << 函數兩次。再一次說明分行寫程序代碼只是為了我們閱讀方便,因為這個main 函數也可以被寫為以下形式而沒有任何問題:
int main () { cout << " Hello World! "; cout << " Im to C program "; return 0; }
為方便起見,我們也可以把代碼分為更多的行來寫:
int main ()
{
cout <<
"Hello World!";
cout
<< "Im a C program";
return 0;
}
它的運行結果將和上面的例子完全一樣。
這個規則對預處理器指示行(以#號開始的行)並不適用,因為它們並不是真正的語句。它們由預處理器讀取並忽略,並不會生成任何代碼。因此他們每一個必須單獨成行,末尾不需要分號(;)
注釋 (Comments)
注釋(comments)是源代碼的一部分,但它們會被編譯器忽略。它們不會生成任何執行代碼。 使用注釋的目的只是使程序員可以在源程序中插入一些說明解釋性的內容。
C 支持兩中插入注釋的方法:
// line comment
/* block comment */
第一種方法為行注釋,它告訴編譯器忽略從//開始至本行結束的任何內容。第二種為塊注釋(段注釋),告訴編譯器忽略在/*符號和*/符號之間的所有內容,可能包含多行內容。
在以下我們的第二個程序中,我們插入了更多的注釋。
/* my second program in C
with more comments */
#include <iostream.h>
int main ()
{
cout << "Hello World! "; // says Hello World!
cout << "Im a C program"; // says Im a C program
return 0;
} 顯示結果Hello World! Im a C program
如果你在源程序中插入了注釋而沒有用//符號或/*和*/符號,編譯器會把它們當成C 的語句,那麼在編譯時就會出現一個或多個錯誤信息。