C語言程式結構



一個典型的C語言程式包含一些必須的部分和一些可選的部分,這取決於程式的邏輯、複雜性和可讀性。通常,C程式以一個或多個預處理器指令(#include語句)開始,並且必須包含一個main()函式作為程式的入口點。此外,還可能有變數函式、宏和其他使用者定義函式等的全域性宣告。

預處理器部分

C編譯器附帶幾個庫檔案,副檔名為“.h”。“.h”檔案(稱為“標頭檔案”)包含一個或多個預定義函式(也稱為“庫函式”),可在C程式中使用。

庫函式必須載入到任何C程式中。“#include”語句用於包含標頭檔案。它是一個“預處理器指令”

例如,printf()scanf()函式用於執行控制檯I/O操作。它們在stdio.h檔案中定義。因此,您總是會在任何C程式的頂部找到#include <stdio.h>語句。其他重要且常用的標頭檔案包括string.hmath.hstdlib.h等。

還有其他預處理器指令,例如#define,用於定義常量和宏,以及#ifdef用於條件定義。

以下語句定義了一個常量PI:

#define PI 3.14159

示例

定義常量後,可以在C程式的其餘部分使用它。

#include <stdio.h>
#define PI 3.14159
int main(){
   int radius = 5;
   float area = PI*radius*radius;
   printf("Area: %f", area);
   return 0;
}

輸出

執行此程式碼後,您將獲得以下輸出:

Area: 78.539749

您還可以使用"#define"指令定義宏。它類似於C語言中的函式。我們可以向宏名傳遞一個或多個引數,並在程式碼段中執行操作。

以下程式碼使用#define語句定義AREA宏:

示例

#include <stdio.h>
#define PI 3.14159
#define AREA(r) (PI*r*r)
int main(){
   int radius = 5;
   float area = AREA(radius);
   printf("Area: %f", area);
   return 0;
}

輸出

Area: 78.539749

宏的執行速度通常比函式快。

main()函式

C程式是由一個或多個函式組成的集合。C程式中有兩種型別的函式:庫函式使用者定義函式

C程式中必須至少有一個使用者定義的函式,其名稱必須為main()。main()函式作為程式的入口點。執行程式時,編譯器會查詢main()函式。

main()函式包含一個或多個語句。預設情況下,每個語句必須以分號結尾。語句可能包括變數宣告、決策控制或迴圈結構,或對庫函式或其他使用者定義函式的呼叫。

在C語言中,函式必須有資料型別。返回值的資料型別必須與函式的資料型別匹配。預設情況下,C語言中的函式是int型別。因此,如果函式沒有return語句,則其型別為int,您可以在函式定義中省略它,但編譯器會發出警告:

warning: return type defaults to 'int'

示例

main()函式的一個典型示例如下:

#include <stdio.h>
int main() {
   /* my first program in C */
   printf("Hello, World! \n");
   return 0;
}

輸出

執行此程式碼後,您將獲得以下輸出:

Hello, World! 

全域性宣告部分

此部分包含要在程式中所有函式中使用的變數的宣告。程式後面定義的使用者定義函式以及使用者定義的資料型別的向前宣告也位於全域性部分。

全域性變數宣告示例

int total = 0;
float average = 0.0;

函式的前向宣告示例

float area(float height, float width);

C程式中的子程式

C程式中可能有多個使用者定義的函式。程式設計最佳實踐要求以結構化的方式將程式設計邏輯分解成獨立且可重用的函式。

根據需求,C程式可能有一個或多個使用者定義的函式,這些函式可以從main()函式或任何其他使用者定義的函式中呼叫。

C程式中的註釋

除了C程式的程式設計元素,如變數、結構體迴圈、函式等之外,程式碼中可能還有一些在“/* .. */”中的文字,這些文字被識別為註釋。編譯器會忽略這些註釋。

在程式碼中插入註釋通常有助於記錄程式,以及理解和除錯程式設計邏輯和錯誤。

如果/*符號沒有匹配的*/符號,編譯器會報告錯誤:“未終止的註釋”。

/**/之間的文字稱為C風格註釋,用於插入多行註釋。

/*
Program to display Hello World
Author: Tutorialspoint
Built with codeBlocks
*/

單行註釋以雙斜槓(//)開頭,以換行符結尾。它也可以出現在有效的C語句之後。

int age = 20; // variable to store age

但是,不能在以“//”開頭的行中給出有效的語句。因此,以下語句是錯誤的:

// Variable to store age. int age=20;

C程式的結構

以下程式碼顯示了C程式中的不同部分:

/*Headers*/
#include <stdio.h>
#include <math.h>

/*forward declaration*/
float area_of_square(float);

/*main function*/
int main() {
   /* my first program in C */
   float side = 5.50;
   float area = area_of_square(side);
   printf ("Side=%5.2f Area=%5.2f", side, area);
   return 0;
}

/*subroutine*/
float area_of_square(float side){
   float area = pow(side,2);
   return area;
}

輸出

執行此程式碼後,您將獲得以下輸出:

Side= 5.50 Area=30.25
廣告