交換機介面如何選擇?使用者80213129568942021-06-17 18:27:56

Python中透過csv的writerow輸出的內容有多餘的空行 main(){ int i=1; while(i<=5) printf(“%d\n”,SQ(i++)); } SQ(int y) { return((y)*(y)); } 【例9。10】 #define SQ(y) ((y)*(y)) main(){ int i=1; while(i<=5) printf(“%d\n”,SQ(i++)); } 在例9。9中函式名為SQ,形參為Y,函式體表達式為((y)*(y))。在例9。10中宏名為SQ,形參也為y,字串表示式為(y)*(y))。 例9。9的函式呼叫為SQ(i++),例9。10的宏呼叫為SQ(i++),實參也是相同的。從輸出結果來看,卻大不相同。 分析如下:在例9。9中,函式呼叫是把實參i值傳給形參y後自增1。 然後輸出函式值。因而要迴圈5次。輸出1~5的平方值。而在例9。10中宏呼叫時,只作代換。SQ(i++)被代換為((i++)*(i++))。在第一次迴圈時,由於i等於1,其計算過程為:表示式中前一個i初值為1,然後i自增1變為2,因此表示式中第2個i初值為2,兩相乘的結果也為2,然後i值再自增1,得3。在第二次迴圈時,i值已有初值為3,因此表示式中前一個i為3,後一個i為4,乘積為12,然後i再自增1變為5。進入第三次迴圈,由於i 值已為5,所以這將是最後一次迴圈。計算表示式的值為5*6等於30。i值再自增1變為6,不再滿足迴圈條件,停止迴圈。 從以上分析可以看出函式呼叫和宏呼叫二者在形式上相似,在本質上是完全不同的。