天天看點

c語言 extern_C語言中#if,#if defined ,#ifdef,extern的用法描述

c語言 extern_C語言中#if,#if defined ,#ifdef,extern的用法描述

本文來自網絡,如有侵權請聯系删除,謝謝!

1、#if 和#ifdef

當asd_eee表達式存在而且,值為ture的時候接續向下執行

例如

#define TARGET_LITTLE_ENDINA 1#define TARGET_BIG_ENDINA   0#ifdef TARGET_LITTLE_ENDINAcall little endina function#elsecall big endina function#endif
           

上面的今天寫的代碼,發現我不管把TARGET_LITTLE_ENDINA和TARGET_BIG_ENDINA定義成0或者1,調用的都是little endina函數,一直找不到問題所在,看看代碼也沒有什麼問題。經過分析和查找相關的文檔,原來是自己沒有了解#if和#ifdef之間的差別。對于#if需要是一個表達式,如果表達式為1則調用#if下面的代碼。

對于#ifdef需要的隻是這個值有沒有定義,并不關心這個值是什麼。

表明之間的差別問題就變得非常的容易,隻要把上述代碼中的#ifdef改成#if就可以達到目的。

2 ,#if defined

,#if defined 的意思是是是否對某一個表達式進行了定義

例如 

#if defined(_WIN32) || defined(WIN32)# include #else........
           

例如上面這段代碼,如果既沒有定義_WIN32也沒有定義WIN32,那麼include頭檔案 io.h

3 extern

1.extern用在變量聲明中常常有這樣一個作用,你在*.c檔案中聲明了一個全局的變量,這個全局的變量如果要被引用,就放在*.h中并用extern來聲明。

2.如果函數的聲明中帶有關鍵字extern,僅僅是暗示這個函數可能在别的源檔案裡定義,沒有其它作用。即下述兩個函數聲明沒有差別:

extern int f(); 和int f();

=================================如果定義函數的c/cpp檔案在對應的頭檔案中聲明了定義的函數,那麼在其他c/cpp檔案中要使用這些函數,隻需要包含這個頭檔案即可。

如果你不想包含頭檔案,那麼在c/cpp中聲明該函數。一般來說,聲明定義在本檔案的函數不用“extern”,聲明定義在其他檔案中的函數用“extern”,這樣在本檔案中調用别的檔案定義的函數就不用包含頭檔案

include “*.h”來聲明函數,聲明後直接使用即可。

=================================

舉個例子:

//extern.cpp内容如下:

// extern.cpp : Defines the entry point for the console application.//#include "stdafx.h"extern print(char *p);int main(int argc, char* argv[]){char *p="hello world!";print(p);return 0;}//print.cpp内容如下#include "stdafx.h"#include "stdio.h"print(char *s){printf("The string is %s/n",s);}
           

結果程式可以正常運作,輸出結果。如果把“extern”去掉,程式依然可以正常運作。

由此可見,“extern”在函數聲明中可有可無,隻是用來标志該函數在本檔案中定義,還是在别的檔案中定義。隻要你函數在使用之前聲明了,那麼就可以不用包含頭檔案了。

精選文章

圍觀

c語言 extern_C語言中#if,#if defined ,#ifdef,extern的用法描述

更新一波資源,請快速領取!

熱文

超級幹貨:Linux常用指令 & 實用指令萬字總結!

熱文

檔案操作之fprintf和fscanf函數

熱文

計算機網絡基礎知識總結

熱文

C/C++學習筆記——C提高:指針強化

【END】

如果您覺得本篇文章對您有幫助請轉發給更多的人

順手點一下“在看”也是對小編最大的支援

c語言 extern_C語言中#if,#if defined ,#ifdef,extern的用法描述