C 語言 extern 外部參照

在C語言中變數宣告會隨區域的作用不同,而有不同結果.
通常宣告在全域的各自copy到每個function的memory space並非同一塊空間.
如果想處裡同一分參數除了call by value或是call by pointer.
還可以用extern宣告褫此便數被設定或是初始在另外的文件中.

omci_api_table_access.c
.....
//Global arena in table_access.c
uint16_t TrafficDescriptorIndex[ONU_GPE_MAX_TRAFFIC_DESCRIPTOR][10]={0};.....
 
omci_api_traffic_descriptor.c
.....
enum omci_api_return
omci_api_traffic_descriptor_update(struct omci_api_ctx *ctx,
                                   uint16_t me_id,
                                   uint32_t cir,
                                   uint32_t pir,
                                   uint32_t cbs,
                                   uint32_t pbs,
                                   uint8_t color_mode,
                                   uint8_t ingress_color_marking,
                                   uint8_t egress_color_marking,
                                   uint8_t meter_type)
{
        enum omci_api_return ret = OMCI_API_SUCCESS;
        uint32_t td_idx = 0;
        extern uint16_t TrafficDescriptorIndex[ONU_GPE_MAX_TRAFFIC_DESCRIPTOR][10];        struct omci_api_traffic_descriptor td;
.....

這樣一來就可不用重新設計function的instance,也可以共同存取變數.
另外一點是static屬性與extern剛好是相反的,應避免同時宣告這兩型.

refer:
http://xyz.cinc.biz/2013/04/c-extern.html
http://openhome.cc/Gossip/CGossip/Scope.html
http://stackoverflow.com/questions/7670816/create-extern-char-array-in-c

Facebook Comments
Scottj Written by:

史考特 喜歡3C 愛拍照