|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
(求助) C語(yǔ)言高手請(qǐng)進(jìn) |
| 作者:sir_h 欄目:單片機(jī) |
因?yàn)橐龅讓域?qū)動(dòng),希望高效最好,同時(shí)還要兼顧可讀性,所以想把以前的函數(shù)改成宏定義以節(jié)省時(shí)間。 但實(shí)現(xiàn)起來(lái)就有了問題: 。,對(duì)于無(wú)返回值的函數(shù), 我看到有這種方法,感覺還算合理: void read(CHAR x,CHAR y) { x;//函數(shù)里面的代碼 y; } 改成宏定義為: #define read(x,y) do{x;y;}while(0) 感覺這個(gè)方法還算不錯(cuò),但有一個(gè)小問題,如果函數(shù)體內(nèi)部 要定義變量的話,用這種方法就編譯不通了。如: void read(CHAR x,CHAR y) { CHAR z; x;//函數(shù)里面的代碼 y; z; } 如果是無(wú)返回值的函數(shù),也可以不用定義變量。 大俠們是不是還有別的方法? 。。帶返回值的函數(shù): 怎樣做一個(gè)宏定義替代帶有返回值的函數(shù)呢? * - 本貼最后修改時(shí)間:2006-2-22 11:34:58 修改者:sir_h |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2006/2/22 13:19:00 發(fā)布:
你要知道,宏的實(shí)質(zhì)是代碼替換,而并不是調(diào)用 所以無(wú)法返回值,如果硬是要有個(gè)返回值,可以考慮在宏中使用逗號(hào)語(yǔ)句。但不能在中間聲明變量(C++可以)。 宏的展開是在編譯時(shí)完成的,即將宏的定義,復(fù)制到到代碼中。如果復(fù)制到代碼中后,不符合語(yǔ)法規(guī)則,當(dāng)然就編譯通不過(guò)了。 |
|
| 3樓: | >>參與討論 |
| 作者: zxj005 于 2006/2/22 16:26:00 發(fā)布:
你小子也特懶了點(diǎn)吧 優(yōu)化好你的C,不行就嵌匯編啊。 |
|
| 4樓: | >>參與討論 |
| 作者: xwj 于 2006/2/22 19:31:00 發(fā)布:
你怎樣定義成宏又有什么意義呢? 根本就不能達(dá)到節(jié)省時(shí)間的目的, 只會(huì)徒然破壞程序的結(jié)構(gòu)性和可讀性 同意樓上說(shuō)的: 優(yōu)化好你的C,不行就嵌匯編啊。 |
|
| 5樓: | >>參與討論 |
| 作者: sir_h 于 2006/2/22 22:34:00 發(fā)布:
回復(fù)以上二位 我所用的十六位單片機(jī)的一條指令大概執(zhí)行50ns,但一個(gè)空函數(shù)至少需要400到500ns,如果函數(shù)內(nèi)部的語(yǔ)句不多,函數(shù)本身所耗的時(shí)間就不得不計(jì)算。 因?yàn)閲?guó)內(nèi)關(guān)于這個(gè)單片機(jī)的資料就不多,而且我匯編底子很差,所以想用C完成,比較可靠一些。 |
|
| 6樓: | >>參與討論 |
| 作者: computer00 于 2006/2/23 0:47:00 發(fā)布:
的確,對(duì)于一些很短的、一樣的代碼部分,可以使用宏定義代替函數(shù) 可以起到加快代碼運(yùn)行速度的作用。 |
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |