蘇嵌嵌入式linux實訓第四天

2021-10-07 21:16:06 字數 3519 閱讀 6380

主要學習內容 :

了解c語言概論,重要性,以及基本知識,查缺補漏

一.概述

1.c語言之父?丹尼斯里奇,1978 k&ec–unix

2.c語言特點(優勢)?.net–萬德 c++/-.net c#

直接訪問硬體

執行效率(執行時,解釋性)

移植性子問題【c89 (ansi c)】 隨著 c 語言在多個領域的推廣、應用,一些新的特性不斷被各種編譯器實現並新增進來。於是,建立乙個新的「無歧義、於具體平台無關的 c 語言定義」 成為越來越重要的事情。1983 年,asc x3(ansi 屬下專門負責資訊科技標準化的機構,現已改名為 incits)成立了乙個專門的技術委員會 j11(j11 是委員會編號,全稱是 x3j11),負責起草關於 c 語言的標準草案。1989 年,草案被 ansi 正式通過成為美國國家標準,被稱為 c89 標準。

【c90 (iso c)】 隨後,《the c programming language》第二版開始出版發行,書中內容根據 ansi c(c89)進行了更新。1990 年,在 iso/iec jtc1/sc22/wg14 (iso/iec 聯合技術第 i 委員會第 22 分委員會第 14 工作組) 的努力下,iso 批准了 ansi c 成為國際標準。於是 iso c(又稱為 c90) 誕生了。除了標準文件在印刷編排上的某些細節不同外,iso c(c90) 和 ansi c(c89) 在技術上完全一樣。

【c95】 之後,iso 在 1994、1996 年 分別出版了 c90 的技術勘誤文件,更正了一些印刷錯誤,並在1995 年通過了乙份 c90 的技術補充,對 c90 進行了微小的擴充,經過擴充後的 iso c 被稱為 c95。

【c99】 1999 年,ansi 和 iso 又通過了最新版本的 c 語言標準和技術勘誤文件,該標準被稱為 c99 。這基本上是目前關於 c 語言的最新、最權威的定義了。

c99 標準引入了許多特性,包括內聯函式(inline functions)、可變長度的陣列、靈活的陣列成員(用於結構體)、復合字面量、指定成員的初始化器、對ieee754浮點數的改進、支援不定引數個數的巨集定義,在資料型別上還增加了 long long int 以及複數型別。

毫不誇張地說,即便到目前為止,很少有c語言編譯器是完整支援 c99 的。像主流的 gcc 以及 clang 編譯器都能支援高達90%以上,而微軟的 visual studio 2015 中的c編譯器只能支援到 70% 左右。

【c11】2007 年,c語言標準委員會又重新開始修訂c語言,到了 2011 年正式發布了 iso/iec 9899: 2011,簡稱為 c11 標準。

c11標準新引入的特徵儘管沒 c99 相對 c90 引入的那麼多,但是這些也都十分有用,比如:位元組對齊說明符、泛型機制(generic selection)、對多執行緒的支援、靜態斷言、原子操作以及對 unicode 的支援。

梁老師介紹了一些** 力扣 github

學習c語言重要的還是練習,而不是一味地看書,需要實踐。

二.資料型別

1.所有的資料型別的定義、初始化;

e. g. 變數a

int a; 整型變數

int* a;整型指標變數

int** a;整形指標的指標變數

int a[10];整形陣列

int a[10];整形指標陣列

int( a)[10];陣列指標變數,指向的是執行陣列

int( a)(int);函式指標變數,指向的是形參為int返回值為int

int( a[10])(int);函式指標陣列. 形參為int,返回值為int

乙個有十個指標的陣列,該指標指向乙個函式,該函式有乙個整型引數,並返回乙個整型數

e. g. 2 int((fp1)(int)[10];

fb1:函式指標變數指向乙個函式,形參為int,返回值為陣列指標,該指標指向乙個由十個整形指標的陣列。

int((arr[5])())();

arr:函式指標陣列 該陣列的每個元素都指向函式,函式形參為空,返回值為函式指標,該函式指標指向乙個形參為空返回值為int的函式;

1、float((b()))();

b,函式形參為空返回值,為陣列指標指向乙個函式指標陣列,該陣列的陣列的每個元素指向乙個形參為空返回值為float的函式;

2.void(c)(char,int()());

c函式指標變數,指向乙個函式返回值為void*,有兩個形參,乙個為char,乙個函式指標,該指標指向乙個形參為空,返回值為int的函式;

3.void *(d)(int &,char*(*(char,char **));

4、float(*(e[10])(int&))[5];

e函式指標陣列,陣列的每個元素指向乙個形參為int,返回值為陣列指標函函式,該陣列指標指向乙個有五個元素的float的陣列。

右左法則

先找到變數名 往右看 ;就是乙個變數

再往左看 確定變數儲存的是什麼型別

確定a是乙個變數,就要確定該變數儲存什麼型別的資料,儲存什麼型別的資料,它就是什麼型別的變數;

確定a是乙個指標變數,就要確定該指標變數儲存什麼型別位址,儲存什麼型別的位址,他就是什麼型別的指標變數;

確定a是乙個陣列 就要確定陣列裡的元素是什麼型別的,元素是什麼型別的。它就是什麼陣列。

確定a是乙個函式,就要確定函式的形參和返回值。

1.各種資料型別的位元組長度(所佔記憶體空間的大小)及取值範圍;

char的取值範圍:unsigned 0-255

signed-128-127

原碼 反碼 補碼解決複數的存放問題

計算機裡儲存的是補碼

正數的補碼就是他的原碼

負數的補碼取反加一

000 0000

1111111

10000000=-128

1111111

0000000

000 0001=-1

10000000

11111111

0111 1111=127

基本型別的位元組長度:

sizeof(int)=4

sizeof(char)=1

sizeof(short)=2

sizeof(long)=4舊版 long* 8 其他相同

sizeof(float)=4 64位

sizeof(double)=8

各種資料型別的指標的位元組長度:

指標變數的位元組長度是固定!《因為指標儲存的是位址,位址在作業系統中是固定的長度,是由作業系統位數決定的,32位系統指標四個位元組64位指標8個位元組》

sizeof vs strlen

sizeof 運算子不是函式 作用:計算資料型別或者變數的所佔記憶體空間的大小strlen是字串庫函式;作用:統計當前字串的字元個數不包含\0sizeof,在計算字串的大小是包含\0輸入輸出printf《輸出 格式化控制符》scanfgetcharputchargets++i 被替換成變數ii++ 被替換成數值

等感受:對c語言的掌握還不夠,一直很焦灼,有點頹,挫敗感。因為基礎不夠牢固,之前的幾節課,聽得內容都感覺很陌生,今天的課真正開始c語言的回顧學習,才讓我感到一些熟悉,同樣獲得了很多從未了解的知識,不知道結果如何,但確實有所收穫。希望可以調整好學習狀態,加強實操。

蘇嵌嵌入式linux實訓第四天

任務一 編譯器 優化分別優化了那些?第一級是 調整,第二級是新的視角,第 是表驅動狀態機。任務二 總結gcc靜態庫和動態庫的製作。靜態庫 gcc c add.c,變成.o檔案 ar rcs libadd.a add.o cp libadd.a lib gcc main.c ladd 在系統預設的li...

蘇嵌嵌入式Linux實訓第四天

課程內容 1 c語言的概述 c語言的優勢 直接訪問硬體 執行效率 移植性 c語言能直接訪問硬體原因 指標型別 嵌入式開發為什麼選擇c語言 所有作業系統的核心都採用了c語言 2 資料型別 所有的資料型別的定義 初始化 char 字元型 short 短整型 int 整型 long 長整型 float 單...

蘇嵌嵌入式Linux實訓 第四天

總結一下今天的學習內容。主要複習了c語言的相關知識點,對其進行了重點的總結和用法的提煉,並用c語言進行了對應性的程式設計訓練,以此來提高鞏固 c語言之父 丹尼斯 里奇資料型別 1.資料型別基本知識點 什麼是資料型別 在資料結構中資料型別是乙個值的集合以及定義在這個值集上的一組操作。變數是用來儲存值的...