嵌入式系統(tǒng)開發(fā)人員C語言測試題編譯預(yù)處理_第1頁
嵌入式系統(tǒng)開發(fā)人員C語言測試題編譯預(yù)處理_第2頁
嵌入式系統(tǒng)開發(fā)人員C語言測試題編譯預(yù)處理_第3頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、本文檔為精品文檔,如對你有幫助請下載支持,如有問題請及時(shí)溝通,謝謝支持!本文檔為精品文檔,如對你有幫助請下載支持,如有問題請及時(shí)溝通,謝謝支持! PAGE PAGE 10選擇題根據(jù)編碼規(guī)范,下面說法正確的a。typedef重命名用戶類型;typedefcharNAME20; 是正確的定義;typedef的功能;typedef是在預(yù)編譯時(shí)完成的。(a)下面關(guān)于宏定義的說法正確的是abcd #include #include 指令包含類型名不是.h的文件,因?yàn)檫@樣不容易區(qū)分哪些文件是用于編譯預(yù)處理的;宏表達(dá)式及其參數(shù)應(yīng)該使用括號括起來以避免二義性;盡量避免直接在代碼中使用數(shù)字,應(yīng)使用有意義的宏定義

2、名字;宏所定義的多條表達(dá)式應(yīng)放在大括號內(nèi)。(下面宏定義符合規(guī)范的d #define REC_AREA(a, b) a *b;#define REC_AREA(a, b) (a *b);#define REC_AREA(a, b) (a) *(b);#define REC_AREA(a, b) (a) * (b) (d)以下敘述正確的c。-行上可以出現(xiàn)多個(gè)有效的預(yù)處理命令行參數(shù)的類型應(yīng)與宏定義時(shí)的一致,只占編譯時(shí)間在以下定義中CR是稱為宏名的標(biāo)識#defineCR045(c)閱讀下面程序b #define LETTER 0main()char str20=MultiMedia,c; int I;

3、I=0;While(c=strI)!=0)I+; #if LETTERif(c=a&c=A&cy?x:y(在下列有關(guān)宏替換的敘述中,正確的說法d。宏替換占用運(yùn)行時(shí)間宏名有類型帶參數(shù)的宏替換和函數(shù)等價(jià)宏替換只是字符替換(d)設(shè)有以下宏定義a #define N 3#define Y(n)(N1)*n)則執(zhí)行語句:z=2 *(NY(51);后,z 的值為a. 出錯b.42c.48d. (a)宏定#define PI 31.14159中,宏名PI代替d。a. 單精度b. 雙精度c. 常量d. 字符串(d)編譯預(yù)處理命令d結(jié)尾。a. ;bcd. 回車(d)填空題:#define WIDTH 80#de

4、fine LENGTH WIDTH+40則執(zhí)行賦值語:v=LENGTH*20;(v為int型變后,v的值。以下程序運(yùn)行結(jié)果。#define DEBUGmain()int a=20,b=10,c; c=a/b;#ifndef DEBUG printf(a=%o,b=%o,a,b);#endifprintf(c=%dn,c);,為使之正確運(yùn)行,請?jiān)诶ㄌ栔刑钊霊?yīng)包含的命令行。其中函數(shù)try_me 在 myfile.h 中定義。main()printf(n); try_me(); printf(n);下面程序的運(yùn)行結(jié)果#define MUL(z)(z)*(z)main()printf(%dn,MUL(

5、1+2)+3);下列程序段的輸出。#define f(a,b,x)a*x+bprintf(%d, %dn, f(3,2,1), f(6, 5, f(3, 2, 1);若有以下宏定義:#defineSTR#defineA97已知字符a的ASCII碼值為97,則語句printf(STR,A,A+2);的輸出結(jié)果。)宏定義有效范圍從定義處開始,到本源程序結(jié)束處中止。但可以用 來提前解除宏定義的作用。下面程序的輸出結(jié)果。#define FMT %d, main()int b4 = 1,3,5,7,9,11,13,15,17,19,21,23;printf(FMT, *(*(b+1)+1);printf

6、(FMT, b22);問答與設(shè)計(jì)下面類型定義語句,哪種方法更好?為什么?#define dPS struct s * typedef struct s * tPS;ifndef/define/endif語句是干什么用的?判斷下面預(yù)編譯條件語句是否正確,并改正:if (cond = GLRUN) #ifdef DEBUG| (cond = GLWAIT) #endif)判斷下面預(yù)編譯條件語句是否正確,并改正:#define INIT_RECT_VALUE(a, b) a = 0;b = 0;typedefFP。while的條件部分進(jìn)行賦值的編譯程序選擇項(xiàng),為什么可以查出下面代碼中的運(yùn)算優(yōu)先級錯誤

7、?While(ch = getchar() !=EOF)怎樣使用編譯程序查出下面無意使用的空語句和賦值語句?if (nCome = 063)630使06351。If(pb != NULL & pb != &鍵入為&pbNULL還會執(zhí)行*pb != 0 xff。quot = numer/*pdenom號結(jié)果使被解釋為注釋的開始。word = bHigh8 + = bHigh 65535U#endif怎樣使預(yù)處理程序報(bào)告出這一錯誤?(macro)?請說明有參宏和有參函數(shù)的區(qū)別。請說明宏定義的有效范圍。文件包含的優(yōu)點(diǎn)是什么?請寫出條件編譯的宏命令。指針作為函數(shù)參數(shù)時(shí)能夠改變實(shí)參的值,請說明其原理。?

8、(preprocessor)?標(biāo)準(zhǔn)預(yù)定義FILE有什么作?標(biāo)準(zhǔn)預(yù)定義LINE有什么作?標(biāo)準(zhǔn)預(yù)定義DATE和TIME有什么作?怎樣判斷一個(gè)程序是用CC+?#include?#include和#includefile?#pragma?#line? ?用#define?#defineenum?#pragma?#line?#?typedef與#define的共同點(diǎn)和不同點(diǎn)。switch case條件。怎樣才能使用斷言幫助查出這個(gè)問題?請指出下面函數(shù)中的斷言的錯誤并改正。/* getline n */ void getline(char* pch)intch;/ 必須intdoASSERT( (ch =

9、 getchar() != EOF );While( (*pch+=ch) != n )每當(dāng)使用FILE就產(chǎn)生一個(gè)唯一的文件名字符串。怎樣實(shí)ASSERT宏,才能使文件名字符串在每個(gè)文件中只被定義一次?#define 1(忽略閏年問題。MIN ,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。#define MIN(A,B) ( A)= (B) ? (A) : (B) )(763)預(yù)處理器標(biāo)識#error 的目的是什么?(764)#defineA寫出下列程序段的輸出結(jié)果。10#defineB(AA+2)-2printf(%d, B*2);ifndef/define/endif 干什么用?#include 和

10、 #includefilename.h 有什么區(qū)別?typedefFPI。內(nèi)存管理填空題下面程序的輸出,為什么?char *ptr;if (ptr = (char *)malloc(0) = NULL)puts(Got a null pointer);elseputs(Got a valid pointer);以下程序運(yùn)行后的輸出結(jié)果。main()char m;m=B+32; printf(%cn,m);已有定義如下:struct nodeint data;struct node *next; *p;malloc 函數(shù),使指針p struct node 類型的動態(tài)存儲空間。請?zhí)羁?。p = (s

11、tructnode*)malloc();在絕對地址0 xXXXXXXXX上寫入字符的語句是unsigned char *p = (unsigned char*)0 xF000FF00;*p = a;問答與設(shè)計(jì)對下面程序段進(jìn)行解釋:typedef void (*lpFunction)();lpFunction lpReset = (lpFunction)0 xF000FFF0; lpReset();結(jié)合編譯優(yōu)化原理,指出下面程序存在的問題并修改。int a,b,c;a = inWord(0 x100); / I/O0 x100端口的內(nèi)容存入a變量ba;a = inWord (0 x100); /

12、 I/O0 x100端口的內(nèi)容存入a變量ca;以下為常見的內(nèi)存錯誤,請分別給出解決措施:內(nèi)存分配未成功,卻使用了它;內(nèi)存分配雖然成功,但是尚未初始化就引用它;忘記了釋放內(nèi)存,造成內(nèi)存泄露;內(nèi)存釋放成功,卻繼續(xù)使用它。嵌入式系統(tǒng)中動態(tài)分配內(nèi)存可能發(fā)生的問題有哪些?請分析下面代碼,指出問題并改正:void GetMemory(T_S8 *p, T_S16 nNum)p = (T_S8 *)malloc(sizeof(T_S8) * nNum);void Test(void)T_S8 *str = NULL; GetMemory(str, 100); strcpy(str, hello);mallo

13、c()calloc()?(memory)中的什么地方。什么是堆?什么是棧?什么是頁抖動?如 UNIX Windows)地址空間大于實(shí)際內(nèi)存的技術(shù), 它是通過用磁盤空間模擬 memory)來實(shí)現(xiàn)的。在 80386 和更高級的 Intel CPU 芯片中,在現(xiàn)有的大多數(shù)其它微處理器(如 Motorola Power (Memory Management Unit,縮寫為 MMU “(page)”組成的來處理。一4096 或 8192 每個(gè)正在運(yùn)行的程序建立并維護(hù)一張被稱為進(jìn)程內(nèi)存映射(Process Memory Map,縮與PMM)的表,表中記錄了程序可以存取的所有內(nèi)存頁以及它們的實(shí)際位置。(傳

14、送給 MMU, MMU PMM 必須把包含該地址的頁從磁盤上讀到內(nèi)存中,并且必須更新 PMM (pagefault)。RAM 以操作系統(tǒng)會試圖在 RAM (或),那么可能沒有足夠的 RAM 來承擔(dān)程序要使用的全部內(nèi)存,因此RAM (pagingout)。RAM 頻繁存取內(nèi)存中大量散布的位置的程序更容易在系統(tǒng)中造成頁抖動結(jié)構(gòu)的查找算法,或者使用效率更高的 malloc()函數(shù)。當(dāng)然,你也可以考慮增加系統(tǒng)的RAM,以減少頁出動作?free()?(flag)?8、1632?請指出下面代碼的錯誤,并給出修改措施:T_S8 *itoa (T_S16 n)T_S8 retbuf20;sprintf(ret

15、buf%dn);/ 將整數(shù)轉(zhuǎn)化為字符串returnretbuf;/ 希望返回字符串請指出下面代碼的錯誤,并給出修改措施:T_S8 *p = NULL;T_S16 nMemSize = 0;p = malloc(1024);nMemSizesizeof(p);/ 希望得到這個(gè)指針變量所分配的內(nèi)存塊的大小malloc()據(jù)類型?malloc()的函數(shù)原型。行訪問。剛才被懸掛的指針又指向了新分配的內(nèi)存塊。請?jiān)O(shè)計(jì)一種方案查出這類錯誤。Testvoid GetMemory(char*p)p = (char *)malloc(100);void Test(void)char *str = NULL; GetMemory(str); strcpy(str, hello world); printf(str);Testchar*GetMemory(void)char p = hello world; return p;void Test(void)char *str = NULL; str = GetMemory(); printf(str);TestVoid GetMemory2(char *p, intnum)*p = (char *)malloc(num);void Test(void)char *str = NULL; GetMemory(&str, 100); strcpy(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論