小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

__VA_ARGS__ 宏和##

 勤奮不止 2013-07-23

在 Android 的 NDK 下,不方便調(diào)試,記錄log是個(gè)好方法。

    android/log.h 中有3個(gè)記錄log的函數(shù),其中__android_log_print(int priority, const char* tag, const char* fmt, ...);

    一般情況下,我們都是在debug模式下記錄log,而在release模式下,不記錄,我們一般使用宏來(lái)實(shí)現(xiàn)這樣的功能。

    在release模式下,定義NDEBUG宏,而debug模式下不定義,這樣我們可以通過(guò)該宏是否定義來(lái)設(shè)置是否記錄log。但是C99之前,“...”這個(gè)不定參數(shù)只能用在函數(shù),宏不能使用。有了C99,我們可以順利地使用了。

    #ifndef NDEBUG

        #define LOG(priority, tag, fmt, ...)        __android_log_print(priority, tag, fmt, __VA_ARGS__)

    #else

        #define LOG(priority, tag, fmt, ...)       ((void)(0))

    #endif

    但是在gcc下,如果調(diào)用的時(shí)候沒(méi)有后面的可變參數(shù),會(huì)編譯錯(cuò)誤,而 VC9 不會(huì)。gcc做了擴(kuò)展可以使用##來(lái)消除這個(gè)錯(cuò)誤,也就是改成這樣:

    #define LOG(priority, tag, fmt, ...)        __android_log_print(priority, tag, fmt, ##__VA_ARGS__)

    這樣,無(wú)論VC還是gcc,都可以編譯過(guò)了。

    不過(guò)我是在 .cpp 中使用gcc編譯的,不知道在 .c 中,不使用 -std=c99 能否編譯通過(guò)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多