《C語言程式設計》讀書筆記(四)——函式與程式結構

NO IMAGE

book

4.1

  • 找出某一字串在一段文字內的位置並返回
int strindex(char s[], char t[])
{
int i,j,k;
for(i = 0;s[i] != '\0';i  )  //遍歷初始位置
{
for (j = i,k = 0;t[k] != '\0' && s[j] == t[k];j  ,k  )
;
if(k > 0 && t[k] == '\0')  //t[k] == '\0'表示完全匹配
return i;
}
return -1;  //遍歷完成後沒有找到匹配的
}

4.4

  • 外部變數或函式的作用域從宣告它的地方開始,到其所在的(待編譯的的)檔案的末尾為結束。如果要在外部變數的定義之前使用該變數,或者外部變數的定義與變數的使用不在同一原始檔中,則必須在相應的變數宣告中強制性地使用關鍵字extern.
  • 外部變數定義與宣告
    外部變數的宣告英語說明變數的屬性(主要是變數的型別),而那兩定義除此之外還將引起儲存器的分配。一個外部變數只能某個檔案中定義一次,而其他檔案可以通過extern宣告訪問它;下面給出變數定理和宣告的例子:
//變數定義
int sp;
double val[MAXVAL];  //要說明陣列的大小
//變數宣告
extern int sp;
extern double val[];

4.5

  • 標頭檔案的作用
    由於一些共同使用的外部變數和函式在不同檔案中被使用的時候需要被重新宣告,所以可以將這些需要共同使用的變數和函式的 宣告 放在同一個檔案中,在需要用到這些函式的檔案中只要將這個檔案包含進來就可以直接使用,不必再在每個檔案重新宣告外部變數和函式。這個包含外部變數和共同使用的函式的檔案就叫做標頭檔案,包含標頭檔案的操作叫#include<a.h>。一般標頭檔案只會存放外部變數和函式的宣告,定義在各個.c檔案中實現,因為函式的宣告只能出現一次,如果定義放在標頭檔案中,而這個標頭檔案又被多個檔案引用,那麼容易出現重複定義的問題。

4.6

  • 靜態變數
    宣告一個變數為靜態變數static的作用在於限定該變數的作用區域。如對一個外部變數宣告為靜態變數表示該變數只能在宣告的檔案中使用,在其他檔案中不能使用該外部變數。對一個函式中的變數宣告為靜態變數表示該變數只能在該函式的範圍內使用。注意:在函式中宣告的靜態變數和函式內部變數的區別是靜態變數始終存在於記憶體中,下次呼叫時存放在裡面的值是上次呼叫完畢後的值;而內部變數在函式開始時被分配記憶體,在函式結束後記憶體被收回,下次呼叫重新分配記憶體。

4.9

  • 初始化
    在不進行人為初始化的情況下,外部變數和靜態變數都被初始化為0,而內部變數和暫存器變數沒有定義。外部變數和靜態變數的初始化必須是 常量 表示式。

4.11.2

  • 巨集替換
    巨集定義可以帶引數,不過要十分注意括號的新增,如#define square(x) (x)*(x)中的括號不可省略,否則在計算square(a 1)時會發生錯誤

4.11.3

  • 條件包含 #ifdef
    在標頭檔案的編寫中,為了防止一個標頭檔案被重複包含在同一個.c檔案中,最好使用條件包含格式。
    標頭檔案被重複包含情況:
    假設 a.h 和 b.h 中有 #include “c.h”語句,而在 main.c 中出現了#include “a.h” 和#include “b.h” 那麼 v.h就屬於在一個.c 檔案中重複引用的情況。這時候就會用到如下格式的語句:
#ifndef B_H
#define B_H
//declarations
#endif