C語言學習大程式

2022-09-14 02:36:08 字數 3099 閱讀 1505

大程式

一. 多個.c檔案

• main()裡的**太長了適合分成幾個函式

• 乙個源**檔案太長了適合分成幾個⽂檔案

• 兩個獨立的源**檔案不能編譯形成可執行的程式

二.編譯單元

• 乙個.c檔案是乙個編譯單元

• 編譯器每次編譯只處理乙個編譯單元

三.專案

• 在dev c++中新建乙個專案,然後把幾個源**檔案加入進去

• 對於專案,dev c++的編譯會把乙個專案中所有的源**檔案都編譯後,鏈結起來

• 有的ide有分開的編譯和構建兩個按鈕,前者是對單個源**檔案編譯,後者是對整個專案做鏈結標頭檔案

四.函式原型

• 如果不給出函式原型,編譯器會猜測你所呼叫的函式的所有引數都是int,返回型別也是int

• 編譯器在編譯的時候只看當前的乙個編譯單元,它不會去看同乙個專案中的其他編譯單元以找出那個函式的原型

• 如果你的函式並非如此,程式鏈結的時候不會出錯

• 但是執行的時候就不對了

• 所以需要在呼叫函式的地方給出函式的原型,以告訴編譯器那個函式究竟長什麼樣頭⽂檔案

• 把函式原型放到乙個頭⽂檔案(以.h結尾)中,在需要呼叫這個函式的源**檔案(.c檔案)中#include這個標頭檔案,就能讓編譯器在編譯的時候知道函式的原型

五.#include

• #include是乙個編譯預處理指令,和巨集一樣,在編譯之前就處理了

• 它把那個檔案的全部文字內容原封不動地插入到它所在的地方

• 所以也不是一定要在.c檔案的最前面#include

六.「」還是<>

• #include有兩種形式來指出要插入的檔案

• 「」要求編譯器首先在當前目錄(.c⽂檔案所在的目錄)尋找這個檔案,如果沒有,到編譯器指定的目錄去找

• <>讓編譯器只在指定的目錄去找

• 編譯器自己知道自己的標準庫的標頭檔案在**

• 環境變數和編譯器命令列引數也可以指定尋找標頭檔案的目錄

#include #include 

"main.h

"#include

"min.h"//

int max(int a, int b);

int main(void

)

#include "

main.h

"int gall = 12

;int max(int a,int

b)

#ifndef  _max_h_  //

標頭檔案

#define _max_h_

int max(int a, int

b);extern

int gall; //

宣告全域性變數

struct

node ;

#endif

#include "

main.h"//

min.h

七.#include的誤區• #include不是用來引入庫的

• stdio.h裡只有printf的原型,printf的**在另外的地方,某個.lib(windows)或.a(unix)中

• 現在的c語言編譯器缺省會引入所有的標準庫

• #include 只是為了讓編譯器知道printf函式的原型,保證你呼叫時給出的引數值是正確的型別

標頭檔案

• 在使用和定義這個函式的地方都應該#include這個標頭檔案

• 一般的做法就是任何.c都有對應的同名的.h,把所有對外公開的函式的原型和全域性變數的宣告都放進去

八.不對外公開的函式

• 在函式前面加上static就使得它成為只能在所在的編譯單元中被使用的函式

• 在全域性變數前面加上static就使得它成為只能在所在的編譯單元中被使用的全域性變數

九.宣告 *

1.變數的宣告

• int i;是變數的定義

• extern int i;是變數的宣告

2.宣告和定義

• 宣告是不產生**的東西

• 函式原型

• 變數宣告

• 結構宣告

• 巨集宣告

• 列舉宣告

• 型別宣告

• inline函式

• 定義是產生**的東西

3.標頭檔案

• 只有宣告可以被放在標頭檔案中

• 是規則不是法律

• 否則會造成乙個專案中多個編譯單元裡有重名的實體

• *某些編譯器允許幾個編譯單元中存在同名的函式,或者用weak修飾符來強調這種存在

4.重複宣告

• 同乙個編譯單元裡,同名的結構不能被重複宣告

• 如果你的標頭檔案裡有結構的宣告,很難這個標頭檔案不會在乙個編譯單元裡被#include多次

• 所以需要「標準標頭檔案結構」

5.標準標頭檔案結構

• 運用條件編譯和巨集,保證這個標頭檔案在乙個編譯單元中只會被#include一次

• #pragma once也能起到相同的作用,但是不是所有的編譯器都支援

6.前向宣告 *

• 因為在這個地方不需要具體知道node是怎樣的,所以可以用struct node來告訴編譯器node是乙個結構

C語言學習一hello world程式

話不多說,直接開始。學習大多數程式語言都是從hello world程式開始的,所以我們也從hello world開始。下面給出程式 1.include 2.3.int main 4.從第一句開始講起吧,c語言共有32個關鍵字,第一行我們就接觸到了我們的第乙個關鍵字include 在中文中的意思是包含...

C語言學習篇(程式類)

用預處理指令 define 宣告乙個常數,用以表明1年中有多少秒 忽略閏年問題 define seconds per year 60 60 24 365 ul註解 1 define 語法的基本知識 例如 不能以分號結束,括號的使用,等等 2 直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是...

C語言學習

c語言學習 2013 3 26 1 編寫strcat s,t 函式,功能 將t指向的字串複製到s指向的字串的尾部。程式設計思路 1 通過while迴圈找到字串s的結束符。2 從找到的結束符開始將t複製到s,同時移動二者的指標。2 編寫函式strend s,t 如果字串t出現在字串s的尾部,該函式返回...