笨辦法學(xué)C 練習(xí)5:一個(gè)C程序的結(jié)構(gòu)

練習(xí)5:一個(gè)C程序的結(jié)構(gòu)

原文:Exercise 5: The Structure Of A C Program

譯者:飛龍

你已經(jīng)知道了如何使用printf,也有了可以隨意使用的一些工具,現(xiàn)在讓我們逐行分析一個(gè)簡單的C程序,以便你了解它是如何組織的。在這個(gè)程序里你會(huì)編寫一些不是很熟悉的東西,我會(huì)輕松地把它們拆開。之后在后面的幾章我們將會(huì)處理這些概念。

#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;
}

手動(dòng)輸入這段代碼并運(yùn)行它,之后確保在Valgrind下不出現(xiàn)任何錯(cuò)誤。你可能不會(huì)這樣做,但你得習(xí)慣它。

你會(huì)看到什么

這真是一段無聊的輸出,但是這個(gè)練習(xí)的目的是讓你分析代碼:

$ make ex5
cc -Wall -g    ex5.c   -o ex5
$ ./ex5
You are 100 miles away.
$

分解代碼

當(dāng)你輸出這段代碼時(shí),可能你只弄清楚了這段代碼中的一小部分C語言特性。讓我們快速地逐行分解它,之后我們可以做一些練習(xí)來更好地了解每一部分:

ex5.c:1

這是一個(gè)include,它是將一個(gè)文件的內(nèi)容導(dǎo)入到這個(gè)文件的方式。C具有使用.h擴(kuò)展名作為頭文件的慣例。頭文件中擁有一些函數(shù)的列表,這些都是你想在程序中使用的函數(shù)。

ex5.c:3

這是多行注釋,你可以在/**/之間放置任意多行。

ex5.c:4

這是一個(gè)你遇到的更復(fù)雜的 main 函數(shù)。操作系統(tǒng)加載完你的程序,之后會(huì)運(yùn)行叫做main的函數(shù),這是C程序的工作方式。這個(gè)函數(shù)只需要返回int,并接受兩個(gè)參數(shù),一個(gè)是int作為命令行參數(shù)的數(shù)量,另一個(gè)是char*字符串的數(shù)組作為命令行參數(shù)。這是不是讓人難以理解?不用擔(dān)心,我們稍后會(huì)講解它。

ex5.c:5

任何函數(shù)都以{字符開始,它表示“程序塊”的開始。在Python中用一個(gè):來表示。在其它語言中,可能需要用begin或者do來表示。

ex5.c:6

一個(gè)變量的聲明和同時(shí)的賦值。你可以使用語法type name = value;來創(chuàng)建變量。在C的語句中,除了邏輯語句,都以一個(gè);(分號)來結(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ù)。我們會(huì)在之后說明。

ex5.c:11

一個(gè)main函數(shù)的返回語句,它會(huì)向OS提供退出值。你可能不熟悉Unix軟件的返回代碼,所以這個(gè)也放到后面去講。

ex5.c:12

最后,我們以一個(gè)閉合的}花括號來結(jié)束了main函數(shù)。它就是整個(gè)程序的結(jié)尾了。

在這次分解中有大量的信息,所以你應(yīng)該逐行來學(xué)習(xí),并且確保至少掌握了背后發(fā)生了什么。你不一定了解所有東西,但是在我們繼續(xù)之前,你可以猜猜它們的意思。

附加題

  • 對于每一行,寫出你不理解的符號,并且看看是否能猜出它們的意思。在紙上寫下你的猜測,你可以在以后檢查它,看看是否正確。
  • 回頭去看之前幾個(gè)練習(xí)的源代碼,并且像這樣分解代碼,來看看你是否了解它們。寫下你不了解和不能自己解釋的東西。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容