c++ 編程 幾個(gè)有用的宏詳解
1. 打印錯(cuò)誤信息
如果程序的執(zhí)行必須要求某個(gè)宏被定義,在檢查到宏沒(méi)有被定義是可以使用#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ù)名。
可以在代碼中加入如下語(yǔ)句來(lái)跟蹤代碼的執(zhí)行情況:
if(err) { printf("%s(%d)-%s\n",__FILE__,__LINE__,__FUNCTION__); }
3. C/C++的混合編程
函數(shù)int foo(int a, int b);
在C語(yǔ)言的該函數(shù)在編譯器編譯后在庫(kù)中的名字為_(kāi)foo,而C++中該函數(shù)被編譯后在庫(kù)中的名字為_(kāi)foo_int_int(為實(shí)現(xiàn)函數(shù)重載所做的改變)。如果C++中需要使用C編譯后的庫(kù)函數(shù),則會(huì)提示找不到函數(shù),因?yàn)榉?hào)名不匹配。C++中使用extern “C”解決該問(wèn)題,說(shuō)明要引用的函數(shù)是由C編譯的,應(yīng)該按照C的命名方式去查找符號(hào)。
如果foo是C編譯的庫(kù),如果要在C++中使用foo,需要加如下聲明,其中__cplusplus是c++編譯器預(yù)定義的宏,說(shuō)明該文件是被C++編譯器編譯,此時(shí)引用C的庫(kù)函數(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)問(wèn)題,第三個(gè)宏使用##去掉可能多余的逗號(hào)。
以上就是小編為大家?guī)?lái)的c++ 編程 幾個(gè)有用的宏詳解全部?jī)?nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
C++中volatile關(guān)鍵字的使用詳解以及常見(jiàn)的誤解
volatile 關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等2020-01-01C語(yǔ)言中#define定義的標(biāo)識(shí)符和宏實(shí)例代碼
C語(yǔ)言中,可以用#define定義一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)常量,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中#define定義的標(biāo)識(shí)符和宏的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03C++?AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化
AnimeGAN是是由神經(jīng)網(wǎng)絡(luò)風(fēng)格遷移加生成對(duì)抗網(wǎng)絡(luò)(GAN)而成,它是基于CartoonGAN的改進(jìn),并提出了一個(gè)更加輕量級(jí)的生成器架構(gòu)。本文將介紹如何運(yùn)用AnimeGAN實(shí)現(xiàn)照片一鍵動(dòng)漫化,需要的可以參考一下2021-11-11C/C++實(shí)現(xiàn)手寫數(shù)字識(shí)別的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何使用C/C++實(shí)現(xiàn)手寫數(shù)字識(shí)別,分別處理 32*32 文本數(shù)據(jù)集和mnist 28*28 png數(shù)據(jù)集,感興趣的小伙伴可以跟隨小編一起了解一下2023-10-10浮點(diǎn)數(shù)在計(jì)算機(jī)中存儲(chǔ)方式是怎樣的
這篇文章介紹了浮點(diǎn)數(shù)在計(jì)算機(jī)中是如何存儲(chǔ)的,講解的比較詳細(xì),有需要的朋友可以參考一下。2016-06-06C語(yǔ)言通訊錄管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言通訊錄管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02C++中的繼承問(wèn)題(繼承基本概念、菱形虛擬繼承的對(duì)象模型)
這篇文章主要介紹了C++中的繼承問(wèn)題(繼承基本概念、菱形虛擬繼承的對(duì)象模型),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02詳解C++編程中標(biāo)記語(yǔ)句與復(fù)合語(yǔ)句的寫法
這篇文章主要介紹了C++編程中標(biāo)記語(yǔ)句與復(fù)合語(yǔ)句的寫法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01基于C++中sprintf的錯(cuò)誤總結(jié)詳解
本篇文章是對(duì)C++中sprintf的錯(cuò)誤進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05