一、變量定義與聲明
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-hant/n/369139.html