freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

嵌入式系統(tǒng)程序設計(編輯修改稿)

2024-08-14 23:34 本頁面
 

【文章內容簡介】 fp)。 //緩沖區(qū)為 256B 使用 define替換 “ 魔數 ” ?程序中要盡量避免 “ 魔數 ” 的硬編碼,可以用宏來取代魔數,使可讀性增強,而且移植程序時只要修改宏一處即可 define BUFFER_SIZE 256 fread (buf, BUFFER_SIZE, 1, fp)。 例 ?一個圖形處理程序中,需要不同的顏色執(zhí)行不同操作 例 /*惡劣的例子 */ void ShowColor(int color) { if ( color == 0 ) sub_red()。 else if ( color == 1 ) sub_blue()。 else if ( color == 2 ) sub_green()。 return 。 } 例(改進后的程序) /*然后在源文件中直接使用這些宏來判斷 */ include void ShowColor(int color) { if ( color == RED ) sub_red()。 else if ( color == BLUE ) sub_blue()。 else if ( color == GREEN ) sub_green()。 return 。 } /* */ define RED 0 define BLUE 1 define GREEN 2 程序分層 ?不同的操作系統(tǒng)為應用程序提供了不同的支持,例如 windows2022應用程序可以有多線程特性,但是 ,應用程序對系統(tǒng)有依賴型。 ?這種依賴性沒有具體通用的解決方法,但是可以通過程序分層來解決,把系統(tǒng)相關的代碼放到一起。 注意數據類型的長度 ? 16位機中整型數據是 2字節(jié), 32位機為 4字節(jié),這會導致程序的不兼容。 ? 可以利用宏來重定義數據類型 define int16 int //16位機 int16 a。 define int16 short int //32位機 int16 a。 注意數據類型的長度(續(xù)) ? 16位機中整型數據是 2字節(jié), 32位機為 4字節(jié),這會導致程序的不兼容。 ? 使用可適應任何情況的編碼方式,例如把一個整型數據寫入磁盤: fwrite(amp。i, 4, 1, fp)。 //不好 fwrite(amp。i, sizeof(int), 1, fp)。 //好 對齊問題 ?某些計算機允許數據邊界地址不對齊,把這樣的代碼移植到 ARM上時要小心。 ? ARMv5TE前的處理器都不支持地址不對齊的指針 大小端問題 ?如果兩臺計算機的大小端定義不一致,那么代碼移植時要做轉換 枚舉類型 ? enum是可移植的,但是不同編譯器中對enum分配的字節(jié)數可能不同。 ?不能在不同的編譯器之間對代碼進行交叉連接 減少內嵌匯編 ? C語言的內嵌匯編由 C編譯器來負責編譯,而不使用 armasm或 gas。內嵌匯編可以提高編程效率,但是會影響到程序的可移植性。 C語言與 C++語言的區(qū)別 ?變量定義位置 ?結構體變量 ?數據類型 ?輸入輸出 ?動態(tài)內存分配 ?其他區(qū)別 ★ ★ 1. 變量定義位置 ? C89要求所有變量都必須定義在塊的最前部 ? C++沒有這個要求,可以在程序任意位置定義新的變量 2. 結構體變量 ?在 C++中, struct結構體支持成員函數的定義, C中不行。 ?如果在 C的 struct中定義函數,編譯時會顯示一個 “ field ‘ function name’ declared as function” 錯誤 2. 結構體變量(續(xù)) /* */ struct A { int a。 int b()。 }。 int main() { struct A c。 =2。 return 0。 } 編譯錯誤: “ :5: error: field 39。b39。 declared as a function” C++標準可以通過編譯 2. 結構體變量(續(xù)) ?在 C語言中,聲明一個結構體類型 A之后,使用下面的語句來定義結構體變量 a: ? struct A a。 ?而 C++語言中可以省略 struct 3. 數據類型 ? C++中有 bool (或 boolean類型); ? C中沒有這樣的 bool類型,均為數值類型! ? C編譯器不能通過編譯, C++編譯器可以 bool a。 a = 1。 4. 輸入輸出 ? C中使用 printf、 scanf輸入輸出 ? 使用時不用包含任何頭文件 ? 但如果使用 g++編譯時必須加上 int a。 scanf( %d, amp。a )。 printf( 您輸入的數值是 %d\n, a )。 A. scanf()函數 ?功能: ? 從鍵盤讀入指定格式的數據 ?格式: ? scanf( 控制字符串 , 輸入項列表 )。 ?注意: ? scanf中各變量一定是表示地址的標識符 (加 amp。) 控制字符串 ?控制字符串有兩部分組成: ? 格式說明 ? 形式: ? %[修飾符 ]格式字 ? 普通字符 ? 空格 ? 可打印字符 格式說明 ? 各格式字符及其意義:(詳見 C教程) ? d:輸入一個十進制整數 ? o:輸入一個八進制整數 ? x:輸入一個十六進制整數 ? f:輸入一個小數形式的浮點數 ? e:輸入一個指數形式的浮點數 ? c:輸入一個字符 ? s:輸入一個字符串 空格 ?在多個輸入時,一般用空格或回車作為分隔符 ?若以空格作為分隔符,當輸入中包含字符類型時,可能產生非預期的結果 scanf ( %d%c, amp。a, amp。ch )。 輸入: 45 q 輸出: 45 空格 空格(續(xù)) ?如下語句會有正確輸出 ?此處 %d后的空格,就可以跳過字符 39。q39。前的所有空格 scanf ( %d %c, amp。a, amp。ch )。 輸入: 45 q 輸出: 45 q 可打印字符 ?看一個例子 ?輸入為: 1,2,q ?可以得到 a = 1, b = 2, ch = q ?輸入為: 1 2 q ?除 a的值為 1外, 對 b與 ch的賦值失敗 scanf ( %d,%d,%c, amp。a, amp。b, amp。ch )。 B. printf()函數 ?功能: ? 從缺省輸出設備(一般為顯示器)輸出規(guī)定格式的字符串 ?格式: ? printf( 控制字符串 , 輸入項列表 )。 控制字符串 ?控制字符串有兩部分組成: ? 格式說明 ? 形式: ? %[修飾符 ]格式字 ? 普通字符 ? 空格 ? 可打印字符 格式說明 ? 各格式字符及其意義:(詳見 C教程) ? c:按字符型輸出 ? o:按八進制輸出 ? d:按十進制輸出 ? x:按十六進制輸出 ? u:按無符號整數輸出 ? f:按浮點型小數輸出 ? g:按 e和 f格式中較短的一種輸出 ? e:按科學計數法輸出 普通字符 ?普通字符: ? 可打印字符 ? 主要是說明字符,按原樣輸出,支持漢字輸出 ? 轉義字符(例) ? 不能直接打印,控制產生特殊的輸出效果 普通字符(續(xù)) ?轉義字符示例 i = 789, n = 123, a = ,且 i為整型,n為長整型。 printf( %4d\t%\n\t%lu\n, i, a, n )。 輸出為: 789 123 C語言輸入輸出總結 ?輸入輸出可能是 C和 C++的最明顯的區(qū)別 ? C中用 scanf(), printf()來完成輸入輸出操作 ? C++中全局對象 cin、 cout來輸入輸出,比 C更方便,而且類型檢查機制更加完善 ? C++中的使用方式 ?new 申請 ?delete 釋放 ? C中的使用方式 ?malloc() 申請 ?free() 釋放 5. 動態(tài)內存分配 ★ ★ ?函數原型: ?void *malloc( long size )。 ?作用: ?在對內存中分配 size各字節(jié),并返回了指向這塊內存首地址的指針 ?如果分配失敗,返回 NULL ?返回指針為 void*型的,要強制轉換 A. malloc()函數 ★ ★ ?函數原型: ?void free( void *FirstByte )。 ?作用: ?將之前用 malloc申請的空間歸還操作系統(tǒng) ?否則就導致內存泄漏 ?編譯器不會發(fā)現(xiàn)內存泄漏這樣的錯誤 B. free()函數 ★ ★ C. 函數的用法 /* 例 311 */ include include int main() { int* p。 if((p = (int*)malloc(sizeof(int))) == NULL ) { printf(動態(tài)內存分配失敗 \n)。 exit(1)。 } C. 函數的用法(續(xù)) *p = 100。 printf(%d\n, *p)。 free(p)。 p = NULL。 return 0。 } ?頭文件: ?malloc和 free被頭文件 ?C++中 new和 delete為關鍵字,故無需頭文件包含 ?使用: ?int *p=(int*)malloc(sizeof(int))。 ?int *p = new int。 與 C++的幾點區(qū)別 ★ ★ 6. 其他區(qū)別 ?常量表示方法不同 ? C語言不支持引用的概念,而 C++支持 ?注釋不同, C89不支持單行注釋 ? (++i)++在 C中不合法 ? (a=3)=4在 C中不合法 ?不能在 for循環(huán)頭部定義變量 GNU C擴展 ? 64位整型數據類型 ? 內聯(lián)函數 ? attribute關鍵字 ? 單行注釋 ★ ? switch case 簡寫 ? 預定義宏 ? 結構體和初始化 ? 長度為 0的數組 64位整型數據類型 GNU CC( GNU Compiler Collection)定義了 64為整型關鍵字 long long,可以直接操作 64位數據 long long int a = 0x123。 ~\exp\gnu_c\ 內聯(lián)函數 ? 減少函數調用開銷 ? 增加類型檢查,比宏使用更安全 ? inline是建議而非命令 attribute關鍵字 關鍵字 attribute通過向 GCC指明有關代碼的更多信息來幫助代碼優(yōu)化工作進行的更好。 attribute關鍵字(續(xù)) ? 下面代碼通過使用 __attribute__,當 t未被使用時編譯器不會警告 int main( ) { float t __attribute__ ((unused))。 return 0。 } 例 312 include void quit() __attribute__ ((noreturn))。 void quit() { exit(1)。 } int test(int n) { if ( n 0 ) { quit()。 } else return 0。 } int main( ) { test(1)。 return 0。 } 函數不返回 【 例 313】 /* */ include struct s { int a[2] __attribute__ ((aligned (8)))。 }。 struct t { char a。 int b[2] __attribute__ ((packed))。 }。 int main() { int y __attribute__ ((aligned (16)))。 y=1。 return 0。 } 以 8字節(jié)對齊 單行注釋 int main() { //long long t1。 int t4=3。 return 0。 } ~\exp\gnu_c
點擊復制文檔內容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1