程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> extern關鍵字放到函數體內而導致的linkage問題

extern關鍵字放到函數體內而導致的linkage問題

編輯:C++入門知識

extern關鍵字放到函數體內而導致的linkage問題


不少人都知道,C/C++語言編程時,如果要引用在別的C/C++文件中定義的變量或函數,必須extern一下,才能使用


還有一些人知道,這個extern其實可以放在函數體內聲明,這麼做的理由是不想讓其他無關函數訪問extern對象,例如

void setOldClock()
{
    sysTime = 87654321;
}

void setClock()
{
    extern int sysTime;
    sysTime = 12345678;
}

如果sysTime聲明在函數體外,則setOldClock也會修改該變量,這通常是不想看到的。


那麼問題來了,如果引用是跨語言的呢?


這裡有篇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聲明在函數體外吧


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved