2015.02.15 Keil中*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
<涉及到外部變數的宣告>(不是定義,因為不能賦值)
c/c++語言中有很多地方要用到extern,但是如果沒有真正的瞭解它的意義,會給程式設計帶來很大的麻煩,為了使大家少走彎路,特祥細的說明一下。對於比較小的程式,一般只有一個c檔案和一個標頭檔案,全域性變數我們通常會直接定義在c檔案中,在程式之前加int i定義。如果要在標頭檔案中定義有以下兩種方法:用extern來宣告:extern int i;這一句只是對變數i進行宣告,在c檔案的程式之前必須加上int i進行定義。extern int i=0;這一句宣告和定義都做了。
對於大一點的程式,有很多c檔案和標頭檔案,這個時候全域性變數就必須在標頭檔案中宣告(不需要初始化),然後在一個c檔案中定義(該初始化的要初始化)。如果在標頭檔案中定義,則編譯的時候會出現重複定義的錯誤。
如果只有標頭檔案中宣告就會出現沒有定義有警告。
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
SYMBOL: XXX
MODULE: 222.obj (222)
出現上述錯誤則是因為變數k重複定義,把你的標頭檔案中的變數定義前加extern(只是變數宣告不用初始化),再在某一個你要呼叫該變數的c檔案的程式之前再定義
(注意第一個呼叫的c檔案要負責附帶初始化該變數,其他呼叫的c檔案就不需要初始化過程啦)
首先糾正一個錯誤,extern是用來宣告變數而不是定義變數的
當你需要在一個c語言檔案中使用另外一個c語言檔案中定義的變數時就需要加上extern來宣告,這樣編譯器就知道這個變數是在別的檔案中定義的。 比如:
你在foo.c中定義了一個全域性變數int a=10,你在fff.c中想使用這個變數a,那麼你就需要在使用之前在fff.c中用extern宣告這個變數:extern int a;
相關文章
- keil error:#8:missing closing quote 處理Error
- Oracle中的publicOracle
- let definitions are not supported by current javascript versionJavaScript
- ios-Multiple commands produced error xcode 10 [duplicate]iOSErrorXCode
- PostgreSQL-PostgreSQL中的public(九)SQL
- java中的 public protected friendly privateJava
- Keil閃退
- Check the existence of public synonyms Remove the public synonymsREM
- Keil中translate,build和rebuild有什麼區別Rebuild
- ERROR L107: ADDRESS SPACE OVERFLOW keil錯誤的解決方法Error
- keil環境搭建
- Multiple Regression
- thinkphp中無法解析__PUBLIC__ 模板常量PHP
- java中public private protected default的區別Java
- Keil中搭建自動化單元測試框架Unity框架Unity
- 在KEIL MDK中定義變數到固定地址變數
- Laravel 5中去掉URL中的public路徑方法Laravel
- Keil 5(Keil C51)安裝與註冊 [ 圖文教程 ]
- Error: CreateProcess failed, Command: ‘C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o ..\OBJ\outputErrorAIOBJ
- 如何把keil C51 和 keil MDK(ARM)安裝在一起
- Oracle RAC中的Public IP, VIP和Internal IP,SCANOracle
- C#中public、private、protected、internal、protected internal (轉載)C#
- 【Oracle】-【同義詞】-public與非public同義詞Oracle
- Xcode10 Archive Error - Multiple command product 'xxx/Info.plist' 解決方案XCodeHiveError
- 手動安裝Keil5(製作綠色版/精簡版MDK Keil)
- JavaScript select multipleJavaScript
- Small Multiple(最短路)
- DataGridView with multiple tableView
- Multiple Buffer Pools (83)
- Multiple Block Sizes (53)BloC
- Eclipse中解決Multiple annotations found at this line錯誤。Eclipse
- public interface View介面和public interface ViewResolver介面介紹View
- C++中的三種繼承public,protected,private(轉)C++繼承
- RAC中的各種IP-PUBLIC-VIP-Private-SCAN IP
- public void sendHtmlHTML
- public-image-mirror
- Keil中 "STARTUP.A51" SET (SMALL) DEBUG EP問題解決方法
- keil5裡的ST庫