一、變數定義與聲明
extern一般用於變數或函數的聲明,主要的作用是告訴編譯器這個變數或函數已經在別的地方定義了,在此處只需要聲明即可。具體用法為:
/*在main.c文件中*/ int a = 10; /*在其他文件中,聲明使用*/ extern int a;
這樣其他文件就可以使用變數a了。
需要注意的是,如果要使用extern關鍵字,變數或函數必須先在其他文件中定義過了。
二、跨文件的變數共享
在C語言中,跨文件的變數共享是比較常見的需求。當多個文件需要使用同一個變數時,我們可以在一個文件中定義該變數,並使用extern聲明該變數,然後在其他文件中用extern關鍵字再次聲明該變數,從而實現變數共享。
看下面的示例:
/*在var.c文件中*/ int global_var; /*在other.c文件中*/ extern int global_var; /*在main.c文件中*/ int main(void) { global_var = 10; /*在main.c中給global_var賦初值*/ other_func(); /*在main.c中調用函數*/ } void other_func(void) { printf("%d", global_var); /*在other.c中使用global_var的值*/ }
在這個示例中,我們在var.c中定義了一個全局變數global_var,然後在other.c中用extern關鍵字聲明該變數,以便在other_func函數中使用。在main.c中定義了該變數,然後調用other_func函數,最後輸出全局變數global_var的值。
三、常量定義與聲明
使用extern關鍵字還可以在一個文件中定義常量並在其他文件中使用。這種方式非常適合用來定義程序中經常需要用到的一些常量。
看下面的示例:
/*在const.c文件中*/ extern const int MAX_SIZE = 100; /*在main.c文件中*/ int main(void) { printf("%d", MAX_SIZE); /*使用const.c中定義的常量*/ }
在這個示例中,我們在const.c文件中定義了一個常量MAX_SIZE,並用extern關鍵字聲明該常量,以便在main.c中使用。在main.c中使用了該常量。
四、跨平台共享變數
有時候我們需要在不同平台的代碼之間進行數據共享。此時,為了確保數據類型和位元組對齊方式的一致性,我們需要使用特殊的編譯指令來約束變數的內存分配方式,以免數據類型和位元組對齊方式不同,導致數據共享失敗。
具體做法是在定義變數時,使用__declspec(dllexport)或__declspec(dllimport)聲明變數的內存分配方式。這些指令可以告訴編譯器如何分配變數的內存,以及在不同平台上如何對齊變數。
看下面的示例:
/*在common.h文件中*/ #ifdef _WIN32 #define COMMON_API __declspec(dllexport) #else #define COMMON_API extern #endif /*在common.c文件中*/ int COMMON_API global_var; /*在other.c文件中*/ extern int global_var;
在這個示例中,我們在common.h文件中定義了一個宏COMMON_API,在Windows平台上,這個宏聲明了變數的內存分配方式為__declspec(dllexport),而在其他平台上,這個宏則聲明了變數的內存分配方式為extern。
在common.c文件中,我們定義了一個變數global_var,並使用COMMON_API宏聲明變數在不同平台上的內存分配方式。在other.c中,我們使用extern關鍵字聲明該變數,以便在other.c中使用。
原創文章,作者:UYBCP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369139.html