//宏定義面試題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))