C语言中#if,#if defined ,#ifdef,extern的用法描述
1、#if 和#ifdef
當(dāng)asd_eee表達(dá)式存在而且,值為ture的時(shí)候接續(xù)向下執(zhí)行
例如
#define TARGET_LITTLE_ENDINA 1 #define TARGET_BIG_ENDINA ? 0 #ifdef TARGET_LITTLE_ENDINA call little endina function #else call big endina function #endif
上面的今天寫的代碼,發(fā)現(xiàn)我不管把TARGET_LITTLE_ENDINA和TARGET_BIG_ENDINA定義成0或者1,調(diào)用的都是little endina函數(shù),一直找不到問題所在,看看代碼也沒有什么問題。經(jīng)過分析和查找相關(guān)的文檔,原來是自己沒有理解#if和#ifdef之間的區(qū)別。
對(duì)于#if需要是一個(gè)表達(dá)式,如果表達(dá)式為1則調(diào)用#if下面的代碼。
對(duì)于#ifdef需要的只是這個(gè)值有沒有定義,并不關(guān)心這個(gè)值是什么。
表明之間的區(qū)別問題就變得非常的容易,只要把上述代碼中的#ifdef改成#if就可以達(dá)到目的。
2 ,#if defined
?
,#if defined 的意思是是是否對(duì)某一個(gè)表達(dá)式進(jìn)行了定義
例如?
#if defined(_WIN32)|| defined(WIN32) # include #else ........例如上面這段代碼,如果既沒有定義_WIN32也沒有定義WIN32,那么include頭文件 io.h
3 extern
1.extern用在變量聲明中常常有這樣一個(gè)作用,你在*.c文件中聲明了一個(gè)全局的變量,這個(gè)全局的變量如果要被引用,就放在*.h中并用extern來聲明。
2.如果函數(shù)的聲明中帶有關(guān)鍵字extern,僅僅是暗示這個(gè)函數(shù)可能在別的源文件里定義,沒有其它作用。即下述兩個(gè)函數(shù)聲明沒有區(qū)別:
extern int f(); 和int f();
=================================
如果定義函數(shù)的c/cpp文件在對(duì)應(yīng)的頭文件中聲明了定義的函數(shù),那么在其他c/cpp文件中要使用這些函數(shù),只需要包含這個(gè)頭文件即可。
如果你不想包含頭文件,那么在c/cpp中聲明該函數(shù)。一般來說,聲明定義在本文件的函數(shù)不用“extern”,聲明定義在其他文件中的函數(shù)用“extern”,這樣在本文件中調(diào)用別的文件定義的函數(shù)就不用包含頭文件
include “*.h”來聲明函數(shù),聲明后直接使用即可。
=================================
舉個(gè)例子:
//extern.cpp內(nèi)容如下:
結(jié)果程序可以正常運(yùn)行,輸出結(jié)果。如果把“extern”去掉,程序依然可以正常運(yùn)行。
由此可見,“extern”在函數(shù)聲明中可有可無,只是用來標(biāo)志該函數(shù)在本文件中定義,還是在別的文件中定義。只要你函數(shù)在使用之前聲明了,那么就可以不用包含頭文件了。
聲明:
本文于網(wǎng)絡(luò)整理,版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請(qǐng)聯(lián)系我們刪除或授權(quán)事宜。
總結(jié)
以上是生活随笔為你收集整理的C语言中#if,#if defined ,#ifdef,extern的用法描述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 16中的地图位置服务要不要开
- 下一篇: iPhone 内存已满出现“白苹果”问题