c++ 編程 幾個(gè)有用的宏詳解
1. 打印錯(cuò)誤信息
如果程序的執(zhí)行必須要求某個(gè)宏被定義,在檢查到宏沒有被定義是可以使用#error,#warning打印錯(cuò)誤(警告)信息,如:
#ifndef __unix__ #error "This section will only work on UNIX systems" #endif
只有__unix__宏被定義,程序才能被正常編譯。
2. 方便調(diào)試
__FILE, __LINE, __FUNCTION是由編譯器預(yù)定義的宏,其分別代表當(dāng)前代碼所在的文件名,行號(hào),以及函數(shù)名。
可以在代碼中加入如下語句來跟蹤代碼的執(zhí)行情況:
if(err) {
printf("%s(%d)-%s\n",__FILE__,__LINE__,__FUNCTION__);
}
3. C/C++的混合編程
函數(shù)int foo(int a, int b);
在C語言的該函數(shù)在編譯器編譯后在庫中的名字為_foo,而C++中該函數(shù)被編譯后在庫中的名字為_foo_int_int(為實(shí)現(xiàn)函數(shù)重載所做的改變)。如果C++中需要使用C編譯后的庫函數(shù),則會(huì)提示找不到函數(shù),因?yàn)榉?hào)名不匹配。C++中使用extern “C”解決該問題,說明要引用的函數(shù)是由C編譯的,應(yīng)該按照C的命名方式去查找符號(hào)。
如果foo是C編譯的庫,如果要在C++中使用foo,需要加如下聲明,其中__cplusplus是c++編譯器預(yù)定義的宏,說明該文件是被C++編譯器編譯,此時(shí)引用C的庫函數(shù),就需要加extern “C”。
#ifdef __cplusplus
extern “C” {
#endif
extern int foo(int a, int b);
#ifdef __cplusplus
}
#endif
4. 可變參數(shù)
#define debug(format, args...) fprintf (stderr, format, args)
#define debug(format, ...) fprintf (stderr, format, __VA_ARGS__)
或者#define debug(format, ...) fprintf (stderr, format, ## __VA_ARGS__)
前兩者存在多余逗號(hào)問題,第三個(gè)宏使用##去掉可能多余的逗號(hào)。
以上就是小編為大家?guī)淼腸++ 編程 幾個(gè)有用的宏詳解全部內(nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
cocos2dx-3.10 C++實(shí)現(xiàn)滾動(dòng)數(shù)字
這篇文章主要為大家詳細(xì)介紹了cocos2dx-3.10 C++實(shí)現(xiàn)滾動(dòng)數(shù)字效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09
解析Linux內(nèi)核的基本的模塊管理與時(shí)間管理操作
這篇文章主要介紹了Linux內(nèi)核的基本的模塊管理與時(shí)間管理操作,包括模塊加載卸載函數(shù)的使用和定時(shí)器的用法等知識(shí),需要的朋友可以參考下2016-02-02
C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實(shí)現(xiàn)方法示例
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之平衡二叉樹(AVL樹)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了C語言平衡二叉樹的相關(guān)定義與使用技巧,需要的朋友可以參考下2018-01-01

