不少人都知道,C/C++語言編程時,如果要引用在別的C/C++文件中定義的變量或函數,必須extern一下,才能使用
還有一些人知道,這個extern其實可以放在函數體內聲明,這麼做的理由是不想讓其他無關函數訪問extern對象,例如
void setOldClock() { sysTime = 87654321; } void setClock() { extern int sysTime; sysTime = 12345678; }
那麼問題來了,如果引用是跨語言的呢?
這裡有篇MSDN的文章,講得比較詳細,但對於函數體內聲明的場景沒有涉及。
其實,如果是C++引用C的對象,一定不能在函數體內extern,
void setClock() { extern "C" int sysTime; sysTime = 12345678; }
上面的代碼gcc編譯器會報錯:
error: expected unqualified-id before string constant
gcc將“C"看做字符串常量,而不是linkage directive,進而導致後面的
error: 'sysTime' was not declared in this scope
所以,對於C++調C對象的場景,還是把extern聲明在函數體外吧