在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