工程時間培訓Day4

2021-10-07 21:14:01 字數 4023 閱讀 2482

89的改變

1、增加restrict指標

c99中增加了公適用於指標的restrict型別修飾符,它是初始訪問指標所指物件的惟一途徑,因此只

有借助restrict指標表示式才能訪問物件。restrict指標指標主要用做函式變元,或者指向由malloc()函式所分配的記憶體變數。restrict資料型別不改變程式的語義。

ne(內聯)關鍵字內聯函式除了保持結構化和函式式的定義方式外,還能使程式設計師寫出高效率的**.函式的每次呼叫與返回都會消耗相當大的系統資源,尤其是當函式呼叫發生在重複次數很多的迴圈語句中時.一般情況下,當發生一次函式呼叫時,變元需要進棧,各種暫存器記憶體需要儲存.當函式返回時,暫存器的內容需要恢復。如果該函式在**內進行聯機擴充套件,當**執行時,這些儲存和恢復操作旅遊活動會再發生,而且函式呼叫的執行速度也會大大加快。函式的聯機擴充套件會產生較長的**,所以只應該內聯對應用程式效能有顯著影響的函式以及長度較短的函式。

3、新增資料型別 

_bool值是0或1。c99中增加了用來定義bool、true以及false巨集的頭資料夾,以便程式設計師能夠編寫同時相容於c與c++的應用程式。在編寫新的應用程式時,應該使用標頭檔案中的bool巨集。的增強可變長陣列。

c99中,程式設計師宣告陣列時,陣列的維數可以由任一有效的整型表示式確定,包括只在執行時才能確定其值的表示式,這類陣列就叫做可變長陣列,但是只有區域性陣列才可以是變長的.

可變長陣列的維數在陣列生存期內是不變的,也就是說,可變長陣列不是動態的.可以變化的只是陣列的大小.

可以使用*來定義不確定長的可變長陣列。

陣列宣告中的型別修飾符在c99中,如果需要使用陣列作為函式變元,可以在陣列宣告的方括號內使用static關鍵字,這相當於告訴編譯程式,變元所指向的陣列將至少包含指定的元素個數。也可以在陣列宣告的方括號內使用

restrict,volatile,const關鍵字,但只用於函式變元。如果使用restrict,指標是初始訪問該物件的惟一途徑。如果使用const,指標始終指向同乙個陣列。使用volatile沒有任何意義。

5、單行注釋

引入了單行注釋標記 「//」 , 可以象c++一樣使用這種注釋了。

6、分散**與宣告

7、預處理程式的修改

a、變元列表

b、_pragma運算子

c、內部編譯指令

d、新增的內部巨集

stdc_hosted若作業系統存在,則為1

stdc_version199991l或更高。代表c的版本

stdc_iec_599若支援iec 60559浮點運算,則為1

stdc_iec_599_complex若支援iec 60599複數運算,則為1

stdc_iso_10646由編譯程式支援,用於說明iso/iec 10646標準的年和月格式:

yyymmml

8、for語句內的變數宣告  

c99中,程式設計師可以在for語句的初始化部分定義乙個或多個變數,這些變數的作用域僅於本for語句所控制的迴圈體內。

9、復合賦值

c99中,復合賦值中,可以指定物件型別的陣列、結構或聯合表示式。當使用復合賦值時,應在括弧內指定型別,後跟由花括號圍起來的初始化列表;若型別為陣列,則不能指定陣列的大小。建成的物件是未命名的。

10、柔性陣列結構成員

c99中,結構中的最後乙個元素允許是未知大小的陣列,這就叫做柔性陣列成員,但結構中的柔性陣列成員前面必須至少乙個其他成員。柔性陣列成員允許結構中包含乙個大小可變的陣列。sizeof返回的這種結構大小不包括柔性陣列的記憶體。包含柔性陣列成員的結構用malloc()函式進行記憶體的動態分配,並且分配的記憶體應該大於結構的大小,以適應柔性陣列的預期大小。

11、指定的初始化符

c99中,該特性對經常使用稀疏陣列的程式設計師十分有用。指定的初始化符通常有兩種用法:用於陣列以及用於結構和聯合。用於陣列的格式:[index] = vol; 其中,index表示陣列的下標,vol表示本陣列元素的初始化值。

12、printf()和scanf()函式系列的增強

c99中printf()和scanf()函式系列引進了處理long long int和unsigned long long int資料型別的特性。long long int 型別的格式修飾符是ll。在printf()和scanf()函式中,ll適用於d, i, o, u 和x格式說明符。另外,c99還引進了hh修飾符。當使用d, i, o, u和x格式說明符時,hh用於指定char型變元。ll和hh修飾符均可以用於n說明符。

3、c99新增的庫

c89中標準的標頭檔案

定義巨集assert()

字元處理

錯誤報告

定義與實現相關的浮點值勤

定義與實現相關的各種極限值

支援函式setlocale()

數學函式庫使用的各種定義

支援非區域性跳轉

定義訊號值

支援可變長度的變元列表

定義常用常數

支援檔案輸入和輸出

其他各種宣告

支援串函式

支援系統時間函式

c99新增的標頭檔案和庫

支援複數演算法

給出對浮點狀態標記和浮點環境的其他方面的訪問

定義標準的、可移植的整型型別集合。也支援處理最大寬度整數的函式(常見)

首先在此2023年第一次修訂時引進,用於定義對應各種運算子的巨集

支援布林資料型別型別。定義巨集bool,以便相容於c++

定義標準的、可移植的整型型別集合。該檔案包含在中(常見)

定義一般型別的浮點巨集

首先在2023年第一次修訂時引進,用於支援多位元組和寬位元組函式

首先在2023年第一次修訂時引進,用於支援多位元組和寬位元組分類函式

14、__func__預定義識別符號

用於指出__func__所存放的函式名,類似於字串賦值。

15、其它特性的改動

放寬的轉換限制

限制             c89標準  c99標準

資料塊的巢狀層數       15     127

條件語句的巢狀層數      8      63

內部識別符號中的有效字元個數  31     63

外部識別符號中的有效字元個數  6      31

結構或聯合中的成員個數    127    1023

函式呼叫中的引數個數     31     127

不再支援隱含式的int規則

刪除了隱含式函式宣告

對返回值的約束

c99中,非空型別函式必須使用帶返回值的return語句.

擴充套件的整數型別

擴充套件型別 含義

int16_t 整數長度為精確16位

int_least16_t 整數長度為至少16位

int_fast32_t 最穩固的整數型別,其長度為至少32位

intmax_t 最大整數型別

uintmax_t 最大無符號整數型別

對整數型別提公升規則的改進

c89中,表示式中型別為char,short int或int的值可以提公升為int或unsigned int型別.

c99中,每種整數型別都有乙個級別.例如:long long int 的級別高於int, int的級別高於char

等.在表示式中,其級別低於int或unsigned int的任何整數型別均可被替換成int或unsigned int型別.

一、 c語言概述:

c語言之父:丹尼斯里奇

c語言優勢(特點):a) 直接訪問資料b) 執行效率高c) 移植性

c語言為什麼能夠直接訪問硬體?它有指標型別

嵌入式開發為什麼要用到c語言?所有作業系統的核心都由c語言開發的

c語言標準:c89、c99、c11

二、 資料型別

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

7. 右左法則:先找到變數名,第一步向右看 確定a是乙個變數,就要確定該變數儲存什麼型別的資料;而它儲存什麼型別的資料就可以決定它是什麼樣的變數去頂a是乙個指標變數,就要確定該指標儲存什麼型別的位址;它儲存什麼型別的位址就能確定他是什麼型別的變數。確定a是乙個陣列確定a是乙個函式就要去確定函式的形參和返回值。

學大偉業 Day 4 培訓總結

今天講的全是dp.不多廢話,先看一道經典的模板lis 最長不下降子串行 一.lis 給定乙個長度為n的數列,求最長上公升子串行 例 1 7 2 8 3 4 答案 1 2 3 4 1 include 突然想用萬能庫 23 using namespace std 45 const int maxn 10...

嵌入式工程實訓DAY4

王洪飛 2018 10.10 專案名稱 嵌入式工程實訓 本日任務完成情況 學習了用c語言進行程序之間的通訊,linux系統的程序間通訊的學習 本日任務中出現的問題彙總 學習了程序間通訊 程序間的通訊概論 管道通訊 訊號通訊 共享記憶體 訊息佇列 訊號量。本日未解決問題 沒有本日開發收穫 int pi...

湖南集訓Day4

上午的數論感覺還可以,嗯,感覺。因為畢竟我數學弱,只聽懂一半什麼的,感覺證明還是比較顯然的。話說這金牌爺長得好像我某物理老師啊 下午的題終於不是clj出的了,沒辣麼虐了。第一題疑似回文自動機,然而並不會,於是dp水了60分。第二題想了下應該是樹鏈剖分,然後發現搞不出來,回去水第一題,然後水完回來繼續...