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

  免費(fèi)注冊 查看新帖 |

Chinaunix

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

[C] 請問如何將指定字符串動(dòng)態(tài)定義為宏 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-04-15 12:21 |只看該作者 |倒序?yàn)g覽
本帖最后由 xhx321 于 2016-04-18 12:17 編輯


貌似原來的描述把問題寫的很亂, 也沒表述清楚需求及重點(diǎn)。在這里重新寫一下:
需要實(shí)現(xiàn)一個(gè)宏定義:O_PRINT_NAME_REGISTER(DEBUG_STRING_NAME)
例如:

************ 1.C ***********
O_PRINT_NAME_REGISTER(NET_TRACE)
O_PRINT_NAME_REGISTER(MAIN_TRACE)

void example(void)
{
     NET_TRACE(" net log");  // LINE 20
     MAIN_TRACE(" main log") // LINE 21
}

******* output *******
example - 20: net log
example - 21: main log

請注意需要能正確顯示調(diào)用的行號和函數(shù)名。
請問如何實(shí)現(xiàn)上面這個(gè)宏 O_PRINT_NAME_REGISTER ?

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀(jì)念徽章
日期:2015-12-22 16:50:40IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
2 [報(bào)告]
發(fā)表于 2016-04-15 14:11 |只看該作者
只看標(biāo)題的話我想說:你都動(dòng)態(tài)了還扯什么宏

瞄了一眼需求我想說:那叫tag,你加個(gè)tag參數(shù)不就行了

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2016-04-15 15:20 |只看該作者
大神or牛人,表歪樓,如果認(rèn)為很簡單,請把后面實(shí)現(xiàn)了

#define O_PRINT_NAME_REGISTER(string, level ) ?

回復(fù) 2# cokeboL


   

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
4 [報(bào)告]
發(fā)表于 2016-04-15 15:56 |只看該作者

  1. struct printer {
  2.     printer(int l) : level(l) {}
  3.     void operator()(const char *msg) const { if(level >= g_print_level) std::cout << msg << std::endl; }
  4.     const int level=0;
  5. };

  6. #define O_PRINT_NAME_REGISTER(name, level) const printer name(level)
復(fù)制代碼
差不多是這么個(gè)東西?

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀(jì)念徽章
日期:2015-12-22 16:50:40IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
5 [報(bào)告]
發(fā)表于 2016-04-15 16:17 |只看該作者
我沒歪樓,也沒認(rèn)為簡單,我的意思是,不要對語法的追求過于妖魔化,單看為了實(shí)現(xiàn)幾個(gè)打印函數(shù)的需求,很簡單,你寫個(gè)有幾個(gè)參數(shù)的函數(shù)或者幾個(gè)不同的函數(shù)
就搞定的事情,非要追求宏來生成,是不是有點(diǎn)舍本求末了?

碼農(nóng)最大的悲哀是該產(chǎn)品導(dǎo)向的場景,非要語言語法導(dǎo)向,費(fèi)力不討好,除了看上去語法牛逼不容易看懂,然并卵。

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀(jì)念徽章
日期:2015-12-22 16:50:40IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
6 [報(bào)告]
發(fā)表于 2016-04-15 16:27 |只看該作者
老是看見有人問奇葩的語法,普通點(diǎn)的正常點(diǎn)的寫法都能實(shí)現(xiàn),所以這種需求我總結(jié)就三種原因:
一是非要追求奇葩才顯得逼格高
二是舍本求末沒把用代碼實(shí)現(xiàn)需求和用語法實(shí)現(xiàn)代碼的重要性搞明白
三是想研究語法出于興趣愛好
當(dāng)然還有一種可能是上面這三種原因可能占不止一條

第三種值得鼓勵(lì),但是也別太迷戀了,其他情況,不鼓勵(lì)

論壇徽章:
36
子鼠
日期:2013-08-28 22:23:29黃金圣斗士
日期:2015-12-01 11:37:51程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-12-14 06:20:00CU十四周年紀(jì)念徽章
日期:2015-12-22 16:50:40IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-25 06:20:0015-16賽季CBA聯(lián)賽之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16賽季CBA聯(lián)賽之福建
日期:2016-04-07 11:25:2215-16賽季CBA聯(lián)賽之青島
日期:2016-04-29 18:02:5915-16賽季CBA聯(lián)賽之北控
日期:2016-06-20 17:38:50技術(shù)圖書徽章
日期:2016-07-19 13:54:03程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-21 06:20:00
7 [報(bào)告]
發(fā)表于 2016-04-15 16:34 |只看該作者
回復(fù) 4# windoze


    .c文件,沒說支持c++哇。。

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
8 [報(bào)告]
發(fā)表于 2016-04-15 20:42 |只看該作者
回復(fù) 7# cokeboL

我當(dāng)然不可能給他一個(gè)C的,你知道我從來不代做作業(yè)。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2016-04-16 10:06 |只看該作者
本帖最后由 xhx321 于 2016-04-16 11:21 編輯

謝謝版主的回復(fù),因?yàn)槭荂++的寫法,我不是特別懂。請問
在這種方案下,O_DEBUG其實(shí)是被轉(zhuǎn)成的函數(shù)調(diào)用么?如果是函數(shù)調(diào)用,怎么解決行號打印的問題?
例如: 在code里是這樣引用的
void main(void)
{
            O_DEBUG(" print level 0 for O_DEBUG");  // LINE 20
}
希望ouput時(shí)能打印出,O_DEBUG被引用的行號20:
        main - 20 : print level 0 for O_DEBUG

另外解釋一下,我手上有一個(gè)和您類似的C方案, 但是暫時(shí)無法解決行號打印的問題,同時(shí)想看看有沒有不用函數(shù)的方法,才跑到這提問題,不是想來抄作業(yè)的。

@cokeboL:
        1. 標(biāo)題描述的“動(dòng)態(tài)定義宏”,是對預(yù)編譯,預(yù)處理而言的,動(dòng)態(tài)與宏并不矛盾。
        2. 當(dāng)別人提問時(shí),如果解決不了就當(dāng)學(xué)生好了,能不能別說別人不該做這個(gè)事情,然后瞎指導(dǎo)一通。個(gè)人認(rèn)為這里是技術(shù)論壇,不需要來刷存在感。
        3. 我提這個(gè)問題是有自己的需求,不需要玩什么高深技術(shù)。


回復(fù) 8# windoze


   

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
10 [報(bào)告]
發(fā)表于 2016-04-18 10:17 |只看該作者
本帖最后由 yulihua49 于 2016-04-18 10:25 編輯
xhx321 發(fā)表于 2016-04-15 12:21
想實(shí)現(xiàn)這樣的功能。在一個(gè).c里有多個(gè)管理打印的宏。例如:O_DEBUG, O_TRACE,O_ERROR,各自有其打印的級別l ...

你看這個(gè)行嗎?


  1. int ShowLog(int DEBUG_level,const char *fmt,...);

  2. #define EMASS_LOG_DEBUG (5)
  3. #define EMASS_LOG_VERBOSE (4)
  4. #define EMASS_LOG_INFO (3)
  5. #define EMASS_LOG_WARN (2)
  6. #define EMASS_LOG_ERROR (1)

  7. #define EMAS_DEBUG(fmt, arg...) ShowLog(EMASS_LOG_DEBUG, "[D][T:%lx] %s(%d) "fmt, pthread_self(), __FILE__, __LINE__, ##arg)
  8. #define EMAS_VERBOSE(fmt, arg...) ShowLog(EMASS_LOG_VERBOSE, "[V][T:%lx] %s(%d) "fmt, pthread_self(), __FILE__, __LINE__, ##arg)
  9. #define EMAS_INFO(fmt, arg...) ShowLog(EMASS_LOG_INFO, "[I][T:%lx] %s(%d) "fmt, pthread_self(), __FILE__, __LINE__, ##arg)
  10. #define EMAS_WARN(fmt, arg...) ShowLog(EMASS_LOG_WARN, "[W][T:%lx] %s(%d) "fmt, pthread_self(), __FILE__, __LINE__, ##arg)
  11. #define EMAS_ERR(fmt, arg...) ShowLog(EMASS_LOG_ERROR, "[E][T:%lx] %s(%d) "fmt, pthread_self(), __FILE__, __LINE__, ##arg)
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP