extern 和 extern “C” 作用

    extern的作用:

    定義:extern是計算機語言中的一個關鍵字,可置於變量或者函數前,以表示變量或者函數的定義在別的文件中。提示編譯器遇到此變量或函數時,在其它模塊中尋找其定義,另外,extern也可用來進行鏈接指定。

    舉個栗子:

extern_test.h文件
#ifndef EXTERN_TEST_H
#define EXTERN_TEST_H

int a = 10;

#endif // EXTERN_TEST_H


main.cpp 文件
#include <iostream>

using namespace std;

extern int a;
int main(int argc, char *argv[])
{

    return 0;
}

  main.cpp文件需要用到另一個文件的全局變量a,需要用extern int a;

  注意:extern 後面修飾的只能是一個全局變量。

    使用extern "C"的目的:

    首先,你需要明白一點,C++在編譯函數和變量的時候會進行傾軋(就是支持重載,將函數重載成一個特定的名字,而C語言不支持重載),而當C++調用的C語言函數庫是已經編譯好的,是用C的方法編譯的,所以如果你還是按照正常思路調用C庫函數的話(如果不在頭文件中加extern "C"),就會出現在頭文件中的函數被傾軋,而庫函數不傾軋,會鏈接出錯,所以C++就在調用C語言的頭文件里加了extern "C",這樣兩邊都不傾軋就可以了。簡單來說:extern "C" 實現了C頭文件與C庫函數裏編譯代碼的統一。下面是C頭文件中的代碼:

#ifndef _INC_STDIO
#define _INC_STDIO

#include <crtdefs.h>

#include <_mingw_print_push.h>

#pragma pack(push,_CRT_PACKING)

#ifdef __cplusplus
extern "C" {
#endif

頭文件里加了extern "C"指示C++編譯器不要對所包含的代碼進行傾軋,所以C頭文件裏的代碼和庫文件裏的代碼就實現了統一。

也就是說使用extern "C"的時候,要在聲明和定義處同時使用。

發佈了274 篇原創文章 · 獲贊 50 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章