C語言 你不知道的事(關於標頭檔案)

2021-09-03 01:10:09 字數 3775 閱讀 1506

前言:我之前的稿子因為我嘗試著複製一大串**而崩潰了,大概1千來字,全都沒有了,現在這是從寫的。我的內心毫無波瀾,甚至還有點想笑

在我們剛開始學c語言時,我們都知道要在程式的第一行打

#include

現在拿helloworld為例

#include

intmain()

我們都知道要打#include書上給我們的解釋並不全面;只是說用呼叫標準函式庫,

因為這些庫中有我們學習c語言以來所用到的常用的和重要的函式

printf,scanf(),getchar,puts,gets

等等一些非常熟悉的函式

後來,隨著學習的深入,我們學習了關於數學的函式

#include

在其中,我們知道了用sqrt是開平方函式,

pow是求指數函式,並運用我們的實踐之中

再之後當我們學習到關於字串的時候,我們又了解了字串處理函式要引用

#include

其中有著如

strcat字串連線函式

strcpy字串複製函式

strcmp字串比較函式(注意有三個不同的返回值及比較的規則)

strlen字串測量函式(注意與sizeof的區別)

等等等等,

這個時候還有題目要我們編寫與自己的字串連線函式和和衣服穿複製函式

後來,我們學習指標和結構體的知識的時候,我們又認識了

#include

其中也有我們常用的一些函式

malloc

隨機產生乙個產生0到32767間的隨機整數(0到0x7fff之間)

在很久之前的一道計算遊戲中的題中我們遇到過,並用它來生成數字。

但要注意的是,如果想要每一次執行都是不一樣的值的話,我們需要新增如下語句

srand((int)time(null));c語言中語句srand( (time(null) ) ; 表示設定乙個隨機種子,每次執行都能保證隨機種子不同。在c語言中,rand()函式可以用來產生隨機數,但是這不是真正意義上的隨機數,是乙個偽隨機數,它是根據乙個數,我們可以稱它為種子,為基準以某個遞推公式推算出來的一係數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的。

因此,c提供了srand()函式,它的原型是 void srand( int a)。用來改變這個種子值。

srand( (time(null) )中time(null)函式是得到乙個從2023年1月1日到現在的時間秒數,這樣每一次執行程式的時間的不同就可以保證得到不同的隨機數了。

當我們慢慢的學到第7章關於函式的知識的時候

我們常常要寫乙個乙個的函式,有的時候,我們面對同乙個問題,每次解決的時候就要再打一遍那個函式,當我們面對的問題比較複雜。要用到不同的函式。

我們就要打很多行的**,每個函式佔的空間又很多

降低了可讀性,並且不美觀精簡

那麼有沒有一種方法可以不用敲重複的**而且讓程式更美觀,邏輯更清晰呢?

。。。。。。。。。。

。。。。。。。

。。。。。

沒有,滾!

是不能的

這時我們就有必要寫乙個標頭檔案把日常常用的一些函式,或者結構體的定義或宣告放在裡面,把它放到編譯器的根目錄中的include資料夾中;

這是vc++6.0的路徑

這是c free5的路徑,也是我主要使用的編譯器;

下面我們要建立乙個標頭檔案,我在昨天已經建立了乙個把它直接拿出來

#ifndef _lihan_h_

#define _lihan_h_

//這兩行和endif是為了防止重定義

#include

//引用標記庫函式

#include

inttest

(char

* p,

int n)

;//函式的宣告

static

int ops,aos,fos,los,flag1;

void

putstars()

//我為了避免寫多個檔案將定義也放在了這裡,這是個不好的示範,標頭檔案應盡量只放函式的宣告,因為定義一旦內容多起來就不容易管理了

void

put_int_array

(int a,

int n)

}void

input_int_array

(int a,

int n)

}int

primenumber

(int aos)

}return flag1;

}#endif

(1)標頭檔案開頭處的版權和版本宣告;

(2)預處理塊;

(3)inline函式的定義;

(4)函式和類結構宣告等。在標頭檔案中,用 ifndef/define/endif結構產生預處理塊,用 #include 格式來引用庫的標頭檔案。標頭檔案的這種結構,是利用c語言進行開發軟體所通常具備的,屬於公有知識。

下面我們以stdio來展示以下

下面我們來嘗試呼叫我們的標頭檔案

#include

#include

"lihan.h"

intmain()

下面是程式執行截圖

這樣,我們就省去了打兩個for迴圈,和設變數的時間,程式就精簡了。

由於事很多,我只在其中寫了三個函式(乙個實驗用的輸出星星函式),

大家可以學會了之後,可以新增自己的成果。

今天的部落格沒有多少**,所以顯得稍短一點,

要這樣想,你寫了別人沒有的東西,不論實現難度的高低,與複雜程度,對於你來說

都應該是一種創新。

雙12,下午,晴。

你不知道的事 關於多級反饋佇列MLFQ的一些細節

多級反饋佇列的基本原理此處不再闡述了。這裡主要指出幾個我關注到的細節而網上大部分的部落格都沒有提到的,並不全面。更多多級反饋佇列的細節請參閱參考資料等。程序可以大致分為cpu密集型的程序 cpu bound jobs 和io密集型的程序 i o bound jobs 而一般而言,對於io密集型型程序...

C語言你不知道的事(2)

記錄學習的第八天 今天還是分享一下c語言的一些比較愉快的知識點 1.switch語句中break的重要性 首先呢我們看一下 int x scanf d x switch x 這是一段再正常不過的swich語句 如果我們把所有的break刪掉,會出現什麼情況呢 是編譯報錯?還是什麼?x 嗯哼哼 答案是...

關於python開啟檔案你所不知道的

python開啟檔案是否為動態獲取檔案的內容?什麼意思呢?就是我寫乙個程式,開啟乙個檔案,一直對他迴圈讀取,我在另乙個程式,開啟這個檔案,以a的模式追加內容,那麼第乙個程式是否能讀取到第二個程式追加的內容呢?還是說第一次讀取的檔案 僅僅是一開始讀到的內容呢。建設乙個file檔案,內容就為吧lqwzs...