2019年10月17日 星期四

static, extern in C, C++

extern

例:
xx.h
extern int a;

xx.cpp
int a = 100;

即:
    當別的cpp檔,include xx.h時,即告知linker a不在此.h與.cpp內,要去其他.o檔找。而build xx.h與xx.cpp時,會告知此a變數,可以給其他.o找到



Function或variable非class member


static function();(此變數宣告不在function裡)
static variable;(此變數宣告不在function裡)


A static function is a function whose scope is limited to the current source file.

即:
    此function只會在自己對應的.h與.cpp內被看到,當.h與.cpp被build成.o檔時,其他程式如果
需要link此function會看不到。同理,此變數只在此.h與.cpp內看的到。

static variable;(此變數宣告在function裡)

即:
    call完此function後,此variable依然存在,不會消失。



Function或variable是class member

class xxx{
  static int a;
  static void function();
}

即:
    此variable不屬於任何instance,而是屬於此class的,所有instance共用此變數,可用此變數來計算instance個數。
    此function不屬於任何instance,而是屬於此class的,未有instance即可呼叫此function。



參考:
[C/C++] 靜態函式 (static function) 2011
C/C++ 中的 static, extern 的變數

沒有留言:

張貼留言