C++面試題之宏定義面試題

//宏定義面試題1.cpp
//What is the output of the following code?[中國臺灣某著名殺毒軟件公司2005年10月面試題]
#include<stdio.h>
#define SQR(x) (x*x)
void main()
{
 int a,b=3;
 a=SQR(b+2);
 printf("/n%d",a);
}

//A. 25   B.11   C.Would vary from compiler to compiler    D.Error
//B
//宏定義展開時容易造成二義性問題。a=SQR(b+2)這一語句展開後爲“b+2*b+2”,而並不是想象中
//的“(b+2)*(b+2)”.要是想得到這個結果,必須把宏定義語句改成如下的形式:
//#define SQR(X) ((x)*(x))
//這樣結果就是25

 

//宏定義面試題2.cpp

//用預處理指令#define聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)。
//[美國某著名計算機嵌入式公司2005面試題]

//解析:
//通過這道題面試官想考幾件事情:

//#define語法的基本知識(例如,不能以分號家屬,括號的使用,等等)。

//要懂得預處理器爲你計算常數表達式得值,因此,寫出你是如何計算一年有多少秒而不是計算出實際的值,
//會更有意義。

//意識到這個表達式中用到UL(表示無符號長整型),那麼你就有了一個好的起點。記住,第一印象很重要。
//答案:#define SECOND_PER_YEAR (60*60*24*365)UL (or Ul or uLor ul)

}

 

 

//宏定義面試題3.cpp

//寫一個“標準”宏MIN,這個宏輸入兩個參數並返回較小的一個。
//[美國某著名計算機嵌入式公司2005面試題]

//解析:
//這個測試是爲下面的目的而設的:

//標識#define在宏中應用的基本知識。這是很重要的,因爲直到嵌入(inline)操作符變爲C的一部分,宏都是方便地產生
//嵌入代碼的唯一方法。對於嵌入式系統來說,爲了能達到要求的性能,潛入代碼經常是必須的方法。

//三重條件操作符的知識。這個操作符存在C語言中的原因是它使得編譯器能產生比 if-then-else更優化的代碼。何計算一年有多少秒而不是計算出實際的值,
//瞭解這個用法是很重要的。

//懂得在宏中小心地把參數用括號括起來。號長整型),那麼你就有了一個好的起點。記住,第一印象很重要。
//答案:#define MIN(A,B)  ((A)<=(B)?(A):(B))

發佈了36 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章