你已經(jīng)知道了如何使用printf
,也有了可以隨意使用的一些工具,現(xiàn)在讓我們逐行分析一個簡單的C程序,以便你了解它是如何組織的。在這個程序里你會編寫一些不是很熟悉的東西,我會輕松地把它們拆開。之后在后面的幾章我們將會處理這些概念。
#include <stdio.h>
/* This is a comment. */
int main(int argc, char *argv[])
{
int distance = 100;
// this is also a comment
printf("You are %d miles away.\n", distance);
return 0;
}
手動輸入這段代碼并運行它,之后確保在Valgrind
下不出現(xiàn)任何錯誤。你可能不會這樣做,但你得習(xí)慣它。
這真是一段無聊的輸出,但是這個練習(xí)的目的是讓你分析代碼:
$ make ex5
cc -Wall -g ex5.c -o ex5
$ ./ex5
You are 100 miles away.
$
當(dāng)你輸出這段代碼時,可能你只弄清楚了這段代碼中的一小部分C語言特性。讓我們快速地逐行分解它,之后我們可以做一些練習(xí)來更好地了解每一部分:
ex5.c:1
這是一個include
,它是將一個文件的內(nèi)容導(dǎo)入到這個文件的方式。C具有使用.h
擴展名作為頭文件的慣例。頭文件中擁有一些函數(shù)的列表,這些都是你想在程序中使用的函數(shù)。
ex5.c:3
這是多行注釋,你可以在/*
和*/
之間放置任意多行。
ex5.c:4
這是一個你遇到的更復(fù)雜的 main
函數(shù)。操作系統(tǒng)加載完你的程序,之后會運行叫做main
的函數(shù),這是C程序的工作方式。這個函數(shù)只需要返回int
,并接受兩個參數(shù),一個是int
作為命令行參數(shù)的數(shù)量,另一個是char*
字符串的數(shù)組作為命令行參數(shù)。這是不是讓人難以理解?不用擔(dān)心,我們稍后會講解它。
ex5.c:5
任何函數(shù)都以{
字符開始,它表示“程序塊”的開始。在Python中用一個:
來表示。在其它語言中,可能需要用begin
或者do
來表示。
ex5.c:6
一個變量的聲明和同時的賦值。你可以使用語法type name = value;
來創(chuàng)建變量。在C的語句中,除了邏輯語句,都以一個;
(分號)來結(jié)尾。
ex5.c:8
注釋的另一種形式,它就像Python或Ruby的注釋。它以//
開頭,直到行末結(jié)束。
ex5.c:9
調(diào)用了我們的老朋友printf
。就像許多語言中的函數(shù)調(diào)用,使用語法name(arg1, arg2);
。函數(shù)可以不帶任何參數(shù),也可以擁有任何數(shù)量的參數(shù)。printf
函數(shù)是一類特別的函數(shù),可以帶可變數(shù)量的參數(shù)。我們會在之后說明。
ex5.c:11
一個main
函數(shù)的返回語句,它會向OS提供退出值。你可能不熟悉Unix軟件的返回代碼,所以這個也放到后面去講。
ex5.c:12
最后,我們以一個閉合的}
花括號來結(jié)束了main
函數(shù)。它就是整個程序的結(jié)尾了。
在這次分解中有大量的信息,所以你應(yīng)該逐行來學(xué)習(xí),并且確保至少掌握了背后發(fā)生了什么。你不一定了解所有東西,但是在我們繼續(xù)之前,你可以猜猜它們的意思。