亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 6776 | 回復(fù): 9
打印 上一主題 下一主題

如何根據(jù)變量值選擇不同的宏定義 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-09-16 21:08 |只看該作者 |倒序瀏覽
問下各位牛人 我想在程序中通過一個變量值來決定用哪一套宏定義  
比如  
if(y變量)  
{  
#define x 1  
}  
else  
{  
#define x 2  
}  

但宏定義都是先編譯執(zhí)行的,請問各位大哥大姐有沒有什么好的方法?

論壇徽章:
0
2 [報告]
發(fā)表于 2010-09-17 00:49 |只看該作者
直接設(shè)變量不就行了   

用宏應(yīng)該沒有辦法使用運行時才能得到的值

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
3 [報告]
發(fā)表于 2010-09-17 11:36 |只看該作者
把你的宏定義加個參數(shù),用來判斷你的變量的

論壇徽章:
0
4 [報告]
發(fā)表于 2010-09-17 11:41 |只看該作者
[Quote=引用 10 樓 bobo364 的回復(fù):]

引用 的回復(fù):
用變量應(yīng)該不行吧,可以用另一個宏控制
#ifdef HH
{
#define x 1
}
#elf
{
#define x 2
}
#endif


用這個是可以的,版本控制中用的很多

HH這個宏也是預(yù)先就知道是否定義了,不能滿足通過變量值選取的需求啊。
其實我是想根據(jù)讀取外界的一個值來定做多套系統(tǒng),比如說從eeprom讀取一個硬件版本號,來區(qū)分不同的軟件版本(有不同的資源分配)。所以宏能否提供這樣的功能嗎?

論壇徽章:
0
5 [報告]
發(fā)表于 2010-09-17 13:51 |只看該作者
把你的宏定義加個參數(shù),用來判斷你的變量的
Godbach 發(fā)表于 2010-09-17 11:36



    你的提法我好像看過,但是一時忘記了,能否給明示一下做法?
   謝謝!或者是原語,呵呵

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
6 [報告]
發(fā)表于 2010-09-17 13:59 |只看該作者
你的提法我好像看過,但是一時忘記了,能否給明示一下做法?
   謝謝!或者是原語,呵呵
againyuan 發(fā)表于 2010-09-17 13:51

把你的需求說明確一些。你就是需要變量值不同的時候,定義不同宏吧,那你定義的宏什么時候用呢?

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
7 [報告]
發(fā)表于 2010-09-17 14:02 |只看該作者
類似于下面這樣的可以么,x 就是你的那個變量
#define VAR(x) do { \
       if(x == A){         \
                do AA;      \
       }else if(x == B){\
                do BB;       \
       }                       \
}while(0)

論壇徽章:
0
8 [報告]
發(fā)表于 2010-09-17 14:21 |只看該作者
類似于下面這樣的可以么,x 就是你的那個變量
Godbach 發(fā)表于 2010-09-17 14:02



    一看就是做內(nèi)核的風(fēng)格,我的需求應(yīng)該是根據(jù)x數(shù)值的不同去定義不同的宏,然后不同的宏去決定下面的不同應(yīng)用
#define VAR(x) do { \
       if(x == A){         \
                #define HOMEPLUG     \
       }else if(x == B){\
                #define MOCA       \
       }                       \
}while(0)
但是如此的定義是不成立的。

我們的需求是
原語:
       read x;
          VAR(x)
          #ifdef HOMEPLUG
                APP1
          #elif MOCA
                APP2
          #endif
大俠看有什么solution?

論壇徽章:
36
IT運維版塊每日發(fā)帖之星
日期:2016-04-10 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-16 06:20:0015-16賽季CBA聯(lián)賽之廣東
日期:2016-04-16 19:59:32IT運維版塊每日發(fā)帖之星
日期:2016-04-18 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-19 06:20:00每日論壇發(fā)貼之星
日期:2016-04-19 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-04-25 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-06 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-08 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-13 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-05-28 06:20:00每日論壇發(fā)貼之星
日期:2016-05-28 06:20:00
9 [報告]
發(fā)表于 2010-09-17 14:57 |只看該作者
       read x;
          VAR(x)
          #ifdef HOMEPLUG
                APP1
          #elif MOCA
                APP2
          #endif

直接替換成
       read x;

          if(x == A){
                APP1
          }else if(x == B){
                APP2
          }

可以么?

論壇徽章:
0
10 [報告]
發(fā)表于 2010-09-17 15:47 |只看該作者
回復(fù) 1# againyuan


    樓主的要求不可能實現(xiàn)吧,宏定義是屬于編譯器預(yù)處理階段分析的語法,而真正涉及到if等等的語法分析是在編譯階段的語法分析做的,所以,到了語法分析階段,所有的宏定義已經(jīng)被預(yù)處理為具體的內(nèi)容了,怎么還能夠再次執(zhí)行預(yù)處理去處理宏定義呢?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP