|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
C語言一問,很困惑,請各位朋友指點 |
| 作者:珊瑚蟲 欄目:嵌入式系統(tǒng) |
請問各位朋友: 假設(shè)我在option.h文件中預(yù)定義了一個宏 #define MCLK (32000000) 請問這個MCLK宏作用范圍是僅限于44b.h文件呢還是在整個工程的所有文件都有效。 比如,我在uart.c中,有這樣一個函數(shù) void Uart_Init(U8 whichUart,U32 baud) { ... ... rUBRDIV0 = ( (int)(MCLK/16./baud + 0.5) -1 ); ... } 那么我在option.h中定義的宏MCLK是不是也會在預(yù)編譯時將MCLK替換為32000000. 總覺得不太對勁,是不是要自己另外定義一個全局變量MCLK,用于作用在Uart_Init中的MCLK啊? 不過我沒有另外定義一個全局變量MCLK,編譯連接也能通過,沒有提示找不到MCLK變量,說明還是宏MCLK在起作用。 不過總覺得有問題。 請各位朋友指點一二,謝謝 |
| 2樓: | >>參與討論 |
| 作者: future_god 于 2005/8/28 11:57:00 發(fā)布:
不大清楚, 我也遇到了這個問題 |
|
| 3樓: | >>參與討論 |
| 作者: computer00 于 2005/8/28 12:44:00 發(fā)布:
如果你在uart.c文件中,未包含option.h文件,則編譯通不過 在哪個文件里使用,就要在哪include |
|
| 4樓: | >>參與討論 |
| 作者: dable_hn 于 2005/9/6 18:13:00 發(fā)布:
包含option.h的*.c文件范圍內(nèi),都有效,其他無效。 |
|
| 5樓: | >>參與討論 |
| 作者: 赤鑄 于 2005/9/7 16:49:00 發(fā)布:
你的困惑讓人很困惑 宏定義就是簡單的符號替換,怎么跟變量扯上關(guān)系了? 有了前面的宏定義 rUBRDIV0 = ( (int)(MCLK/16./baud + 0.5) -1 ); 就被替換成了 rUBRDIV0 = ( (int)((32000000)/16./baud + 0.5) -1 ); 難道你的意思是程序不能直接寫32000000這樣的數(shù)值,而是非得用變量? |
|
| 6樓: | >>參與討論 |
| 作者: akai2002 于 2005/9/8 15:47:00 發(fā)布:
要認(rèn)真看書! 1句話: 要include .h文件 |
|
| 7樓: | >>參與討論 |
| 作者: 最愛韶涵 于 2005/9/9 23:12:00 發(fā)布:
如果作用范圍是僅限于44b.h文件,那么用#ifndef還有什么意義? |
|
| 8樓: | >>參與討論 |
| 作者: qjy_dali 于 2005/9/10 10:55:00 發(fā)布:
那就看你的文件把含MCLK的那個文件包含了沒有 |
|
| 9樓: | >>參與討論 |
| 作者: lijunf25 于 2005/9/14 14:34:00 發(fā)布:
這兒有不少相關(guān)資料 http://www.cediy.com/bbs/X_AdvCom_Get.asp?UserID=1891 |
|
| 10樓: | >>參與討論 |
| 作者: cooldex 于 2005/9/16 17:02:00 發(fā)布:
有意義 如果作用范圍是僅限于44b.h文件,那么用#ifndef還有什么意義? 有意義,要想用MCLK至少要include一次,#ifndef可以避免多次被include,這在很多include文件時很容易發(fā)生 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |