C 面試題(三)

2021-07-25 20:26:19 字數 2063 閱讀 7708

.用預處理指令#define 宣告乙個常數,用以表明1年中有多少秒(忽略閏年問題)

#define seconds_per_year (60 * 60 * 24 * 365)ul
考慮一下幾件事情: 

1). #define 語法的基本知識(例如:不能以分號結束,括號的使用,等等) 

2). 懂得預處理器將為你計算常數表示式的值,因此,直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的。 

3). 意識到這個表示式將使乙個16位機的整型數溢位-因此要用到長整型符號l,告訴編譯器這個常數是的長整型數。 

4). 如果你在你的表示式中用到ul(表示無符號長整型),那麼你有了乙個好的起點。記住,第一印象很重要。 

2. 寫乙個「標準」巨集min,這個巨集輸入兩個引數並返回較小的乙個。

#define min(a,b) ((a) <= (b) (a) : (b))
這個測試是為下面的目的而設的: 

1). 標識#define在巨集中應用的基本知識。這是很重要的,因為直到嵌入(inline)操作符變為標準c的一部分,巨集是方便產生嵌入**的唯一方法, 

對於嵌入式系統來說,為了能達到要求的效能,嵌入**經常是必須的方法。 

2). 三重條件操作符的知識。這個操作符存在c語言中的原因是它使得編譯器能產生比if-then-else更優化的**,了解這個用法是很重要的。 

3). 懂得在巨集中小心地把引數用括號括起來 

4). 我也用這個問題開始討論巨集的***,例如:當你寫下面的**時會發生什麼事? 

least = min(*p++, b); 

3.預處理器標識#error的目的是什麼? 

其目的就是保證程式是按照你所設想的那樣進行編譯的。 

4..h標頭檔案中的ifndef/define/endif 的作用? 

答案:防止該標頭檔案被重複引用

5.#include 與#include "file.h"的區別?

//答:對於#include ,編譯器從標準庫路徑開始搜尋 file.h對於#include "file.h" ,編譯器從使用者的工作路徑開始搜尋file.h

6.在c++ 程式中呼叫被 c編譯器編譯後的函式,為什麼要加 extern 「c」? 

答案:c++語言支援函式過載,c語言不支援函式過載。函式被c++編譯後在庫中的名字與c語言的不同。假設某個函式的原型為: void foo(int x, int y);該函式被c編譯器編譯後在庫中的名字為_foo,而c++編譯器則會產生像_foo_int_int之類的名字。c++提供了c連線交換指定符號extern」c」來解決名字匹配問題 

7.如何引用乙個已經定義過的全域性變數? 

答:extern 可以用引用標頭檔案的方式,也可以用extern關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中宣告的全域性變理,假定你將那個編寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連線期間報錯 

8. 如何判斷一段程式是由 c 編譯程式還是由 c++ 編譯程式編譯的?

#ifdef __cplusplus

cout<<」c++」;

#else

cout<<」c」;

#endif

9.

#include 」stdafx.h

#define sqr(x) x*x

int main(int argc, char* argv)

這道題目的結果是什麼啊 ? 

答: define 只是定義而已,在編擇時只是簡單代換 x*x 而已,並不經過算術法則的 

a /= (k+m)(k+m)/(k+m)(k+m); 

=>a /= (k+m)1(k+m); 

=>a = a/9; 

=>a = 1; 

10.什麼是預編譯,何時需要預編譯? 

答:就是指程式執行前的一些預處理工作,主要指#表示的.需要預編譯的情況:總是使用不經常改動的大型**體。所有模組都使用一組標準的包含檔案和相同的編譯選項。

C 面試題 三

1.用最簡單的方法實現函式int strcmp char p1,char p2 2.a.請定義乙個指向此函式的指標 int test char p1,int ntestcount b.宣告此指標的陣列,包含10個元素。c.給陣列的第乙個元素賦值,使其指向test.d.寫出呼叫陣列的第乙個元素,執行t...

C 經典面試題 三

21.用c 寫個程式,如何判斷乙個作業系統是16位還是32位的?標準答案 定義乙個指標p,列印出sizeof p 如果節果是4,則表示該作業系統是32位,列印結果是2,表示是16位。22.用c 寫個程式,如何判斷乙個作業系統是16位還是32位的?不能用sizeof 函式。參 int a 0 if a...

C 面試題之i 面試題

i 面試題1.cpp 中國台灣某著名防毒軟體公司2005年10月面試題 int i 3,j 4 i?i j printf d d n i,j a.3 3 b.4 4 c.3 4 d.4 3 答案b i 面試題2.cpp 中國某著名計算機金融軟公司2005年面試題 int x 1,j 2 int k ...