国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

免費咨詢刑事辯護(hù)在線律師廣西seo快速排名

免費咨詢刑事辯護(hù)在線律師,廣西seo快速排名,網(wǎng)站開發(fā)的軟件環(huán)境有哪些,離線網(wǎng)站制作文章目錄 在#define中使用參數(shù)參考資料 在#define中使用參數(shù) 在#define中使用參數(shù)可以創(chuàng)建外形和作用與函數(shù)類似的類函數(shù)宏。帶有 參數(shù)的宏看上去很像函數(shù),因為這樣的宏也使用圓括號。類函數(shù)宏定義的圓 括號中可以有一個或多個參數(shù),隨后這些參數(shù)出現(xiàn)在替…

文章目錄

  • 在#define中使用參數(shù)
  • 參考資料

在#define中使用參數(shù)

在#define中使用參數(shù)可以創(chuàng)建外形和作用與函數(shù)類似的類函數(shù)宏。帶有
參數(shù)的宏看上去很像函數(shù),因為這樣的宏也使用圓括號。類函數(shù)宏定義的圓
括號中可以有一個或多個參數(shù),隨后這些參數(shù)出現(xiàn)在替換體中,如圖所
示。
在這里插入圖片描述

下面是一個類函數(shù)宏的示例:

#define SQUARE(X) X*X

在程序中可以這樣用:

z = SQUARE(2);

這看上去像函數(shù)調(diào)用,但是它的行為和函數(shù)調(diào)用完全不同。程序示了類函數(shù)宏和另一個宏的用法。該示例中有一些陷阱,請仔細(xì)閱讀。

/* mac_arg.c -- 帶參數(shù)的宏 */
#include <stdio.h>
#define SQUARE(X) X*X
#define PR(X) printf("The result is %d.\n", X)
int main(void)
{
int x = 5;
int z;
printf("x = %d\n", x);
z = SQUARE(x);
printf("Evaluating SQUARE(x): ");
PR(z);
z = SQUARE(2);
printf("Evaluating SQUARE(2): ");
PR(z);
printf("Evaluating SQUARE(x+2): ");
PR(SQUARE(x + 2));
printf("Evaluating 100/SQUARE(2): ");
PR(100 / SQUARE(2));
printf("x is %d.\n", x);
printf("Evaluating SQUARE(++x): ");
PR(SQUARE(++x));
printf("After incrementing, x is %x.\n", x);
return 0;
}

這里,SQUARE 是宏標(biāo)識符,SQUARE(X)中的 X 是宏參數(shù),X * X 是替
換列表。程序清單 16.2 中出現(xiàn)SQUARE(X)的地方都會被X * X替換。這與前
面的示例不同,使用該宏時,既可以用X,也可以用其他符號。宏定義中的
X由宏調(diào)用中的符號代替。因此,SQUARE(2)替換為2 * 2,X實際上起到參數(shù)
的作用。
然而,稍后你將看到,宏參數(shù)與函數(shù)參數(shù)不完全相同。下面是程序的輸
出。注意有些內(nèi)容可能與我們的預(yù)期不符。實際上,你的編譯器輸出甚至與
下面的結(jié)果完全不同。

x = 5
Evaluating SQUARE(x): The result is 25.
Evaluating SQUARE(2): The result is 4.
Evaluating SQUARE(x+2): The result is 17.
Evaluating 100/SQUARE(2): The result is 100.
x is 5.
Evaluating SQUARE(++x): The result is 42.
After incrementing, x is 7.

前兩行與預(yù)期相符,但是接下來的結(jié)果有點奇怪。程序中設(shè)置x的值為
5,你可能認(rèn)為SQUARE(x+2)應(yīng)該是 7 * 7,即 49。

但是,輸出的結(jié)果是 17,這不是一個平方值!導(dǎo)致這樣結(jié)果的原因是,我們前面提到過,預(yù)處理器不做計算、不求值,只替換字符序列。預(yù)處理器把出現(xiàn)x的地方都替換成x+2。因此,x * x變成了x+2*x+2。如果x為5,那么該表達(dá)式的值為:

5+2*5+2 = 5 + 10 + 2 = 17

該例演示了函數(shù)調(diào)用和宏調(diào)用的重要區(qū)別。函數(shù)調(diào)用在程序運行時把參
數(shù)的值傳遞給函數(shù)。宏調(diào)用在編譯之前把參數(shù)記號傳遞給程序。這兩個不同
的過程發(fā)生在不同時期。是否可以修改宏定義讓SQUARE(x+2)得36?
當(dāng)然可以,要多加幾個圓括號:

#define SQUARE(x) (x)*(x)

現(xiàn)在SQUARE(x+2)變成了(x+2)*(x+2),在替換字符串中使用圓括號就得
到符合預(yù)期的乘法運算。

但是,這并未解決所有的問題。下面的輸出行:

100/SQUARE(2)

將變成:

100/2*2

根據(jù)優(yōu)先級規(guī)則,從左往右對表達(dá)式求值:
(100/2)2,即502,得100。把SQUARE(x)定義為下面的形式可以解決這種混亂:

#define SQUARE(x) (x*x)

這樣修改定義后得100/(2*2),即100/4,得25。
要處理前面的兩種情況,要這樣定義:

#define SQUARE(x) ((x)*(x))

因此,必要時要使用足夠多的圓括號來確保運算和結(jié)合的正確順序。

盡管如此,這樣做還是無法避免程序中最后一種情況的問題。
SQUARE(++x)變成了++x*++x,遞增了兩次x,一次在乘法運算之前,一次
在乘法運算之后:

++x*++x = 6*7 = 42

由于標(biāo)準(zhǔn)并未對這類運算規(guī)定順序,所以有些編譯器得 76。而有些編
譯器可能在乘法運算之前已經(jīng)遞增了x,所以7
7得49。在C標(biāo)準(zhǔn)中,對該表
達(dá)式求值的這種情況稱為未定義行為。無論哪種情況,x的開始值都是5,雖
然從代碼上看只遞增了一次,但是x的最終值是7。
解決這個問題最簡單的方法是,避免用++x 作為宏參數(shù)。一般而言,不
要在宏中使用遞增或遞減運算符。但是,++x可作為函數(shù)參數(shù),因為編譯器
會對++x求值得5后,再把5傳遞給函數(shù)。

參考資料

《C Primer Plus》

http://aloenet.com.cn/news/46196.html

相關(guān)文章:

  • 紹興市中等專業(yè)學(xué)校網(wǎng)站無線網(wǎng)絡(luò)優(yōu)化工程師
  • 移動端前端開發(fā)需要學(xué)什么山東seo多少錢
  • 我回了橙子建站的驗證碼上海疫情最新情況
  • 上海松江區(qū)網(wǎng)站建設(shè)鄭州seo外包平臺
  • 網(wǎng)站推廣服務(wù)合同模板2023年4月疫情恢復(fù)
  • 網(wǎng)站窗口建設(shè)活動營銷推廣方案
  • 怎么給網(wǎng)站做鏈接今日國際新聞?wù)畻l
  • 虎門仿做網(wǎng)站搜索引擎優(yōu)化方案
  • 簡單個人博客模板網(wǎng)站網(wǎng)站內(nèi)容管理系統(tǒng)
  • 京東網(wǎng)站建設(shè)步驟關(guān)鍵詞排名關(guān)鍵詞快速排名
  • 做網(wǎng)站獨立云服務(wù)器什么意思網(wǎng)址大全瀏覽器
  • 網(wǎng)站建設(shè)平臺漢龍網(wǎng)頁制作官方網(wǎng)站
  • 自己做的個人網(wǎng)站無法備案廣東東莞今日最新消息
  • 新手學(xué)做網(wǎng)站必備軟件seo技術(shù)培訓(xùn)課程
  • 網(wǎng)站支付功能怎么做全自動推廣引流軟件免費
  • 日本做暖網(wǎng)站推廣網(wǎng)站要注意什么
  • 寧德住房和城鄉(xiāng)建設(shè)部網(wǎng)站怎樣做網(wǎng)絡(luò)推廣營銷
  • 新網(wǎng)站怎么做權(quán)重國際新聞軍事最新消息
  • 廣東網(wǎng)站制作百度客服人工電話24小時
  • 拼多多網(wǎng)站分析百度網(wǎng)站登錄
  • 做類似交易貓的網(wǎng)站如何優(yōu)化網(wǎng)頁
  • 六安網(wǎng)站建設(shè)哪家靠譜線下推廣宣傳方式有哪些
  • 網(wǎng)站眾籌該怎么做公眾號軟文是什么意思
  • 忍不住在樓道里面做免費網(wǎng)站千萬不要學(xué)網(wǎng)絡(luò)營銷
  • 網(wǎng)站下方一般放什么原因宣傳推廣策略
  • 計算機專業(yè)里面哪個專業(yè)最好攀枝花seo
  • 營銷型網(wǎng)站一套東莞seo網(wǎng)站優(yōu)化排名
  • 哈爾濱住房和城鄉(xiāng)建設(shè)廳網(wǎng)站品牌推廣方案怎么寫
  • 鐵道部網(wǎng)上訂票網(wǎng)站素材網(wǎng)站分析案例
  • 家居飾品網(wǎng)站建設(shè)論文怎么在百度上推廣自己的產(chǎn)品