Keil標頭檔案重複定義的問題
提示 標頭檔案已經包含,並且錯誤指向了我的標頭檔案定義的地方,用sourceinsight搜多了一下,整個專案也只有在當前的》h檔案中有定義,最後從程式碼的main函式開始分析,並且檢視呼叫檔案, 如圖
在檔案的開頭已經包含了"app_console.h",一般習慣是包含的多一點好,全面一點,不會報找不到的錯誤。在這個檔案的後面,定了一個巨集,如圖:
恰好,我又定義了CFG_PRINRF 所以一個檔案了,倆次包含,就出現了標頭檔案重複包含的錯誤。所以,以後標頭檔案的包含,還是要小心一點,一些公共的可以放在最前面,對於一些私有的功能性的標頭檔案來說,最好採用巨集定義的方式。
這裡不是簡單的用條件編譯指令,語法上的機制,最後有點像“邏輯錯誤”
相關推薦
Keil標頭檔案重複定義的問題
提示 標頭檔案已經包含,並且錯誤指向了我的標頭檔案定義的地方,用sourceinsight搜多了一下,整個專案也只有在當前的》h檔案中有定義,最後從程式碼的main函式開始分析,並且檢視呼叫檔案, 如圖 在檔案的開頭已經包含了"app_console.h",一般習
關於C/C++標頭檔案重複定義的思考
1.什麼叫重複定義 我們在寫大型專案的時候,檔案多,關係複雜。往往會引起標頭檔案重複定義的問題。 什麼叫標頭檔案重複定義呢? 舉個最簡單的例子: 有一個頭檔案"c.h",在"a.h"中存在兩次對"c.
C/C++由於標頭檔案重複引入引起的成員或類重複定義的解決辦法
報錯資訊: ../src/Circle.h:10:14: error: redefinition of 'PI' const double PI=3.14159;
標頭檔案重複包含和變數重複定義
在c或c++中,標頭檔案重複包含問題是程式設計師必須避免的問題,也是很多新手容易犯錯的問題。為什麼要避免標頭檔案重複包含呢? 1.我們知道在編譯c或c++程式時候,編譯器首先要對程式進行預處理,預處理其中一項工作便是將你源程式中#include的標頭檔案完整的展
錯誤:重複定義變數的解決辦法——不要在標頭檔案裡定義變數
在寫C程式碼的時候,經常需要在標頭檔案中包含有些預定義的資訊。比如一些結構體的宣告,外部變數,函式的宣告等。 有時候覺得有必要在標頭檔案中定義一些變數,這樣在原始檔中就不需要定義了。但是這樣做,有很大的問題。 比如 [cpp] view plain cop
防止變數重複定義、標頭檔案重複包含、巢狀包含
【轉自】 http://hi.baidu.com/zengzhaonong/blog/item/8a8871062d481f7f03088106.html #include檔案的一個不利之處在於一個頭檔案可能會被多次包含,為了說明這種錯誤,考慮下面的程式碼: #include "x.h"#include "
C/C++避免標頭檔案重複包含的方法
C/C++避免標頭檔案重複包含的方法 1. #ifndef 2. #pragma once 3. 混合使用 在實際的程式設計過程中,因為會使用多個檔案,所以在檔案中不可避免的要引入一些標頭檔案,這樣就可能會出現一個頭檔案被 include
為什麼inline函式應該在標頭檔案中定義?【轉】
(轉自:https://blog.csdn.net/ronnie_hu/article/details/62238311) inline函式(即行內函數)對編譯器而言必須是可見的,以便能夠在呼叫點展開該函式,與非inline函式不同的是,inline函式必須在呼叫該函式的每個檔案中定義。當然,對
C語言標頭檔案的定義
每個C++/C程式通常由標頭檔案(header files)和定義檔案(definition files)組成。標頭檔案作為一種包含功能函式、資料介面宣告的載體檔案,主要用於儲存程式的宣告(declaration),而定義檔案用於儲存程式的實現 (implementation)。 .c就是你寫的程式
KEIL 標頭檔案路徑和#include區別
KEIL 標頭檔案路徑可以直接寫在引號內,預設的話,標頭檔案必須在工程檔案同一個目錄下,比如: #include<ds0832.h> //此時ds0832.h 檔案必須與工程檔案同一目錄 #include "d:\myfile\ds0832.h" //此時 ds0832.h檔案在d:\m
codeblock無法編譯,提示函式沒有定義,但是函式已經 在標頭檔案中定義了
你在新增檔案時沒有選中Targets。預設情況下,一個工程會有兩個Targets,一個叫Debug,一個叫Release,前者可以除錯,用於開發。後者不能除錯,用於生成最終釋出的軟體。CodeBloc
C/C++——標頭檔案重複包含問題
C++程式設計中,一般將類的宣告,類的定義分開,將類的宣告放在.h的標頭檔案中,而將類的定義放在.cpp的原始檔中,這樣我們的程式設計起來更加的模組化也清晰明瞭。但是,這樣的設計也會帶來一些問題,一個典型的問題就是重複定義問題。如果從一個類派生出一個類,派生類宣告時需要包含
C++標頭檔案重定義解決方式
C++由於標頭檔案重複包含了所定義的變數或者常量,編譯器就會報重複定義的錯誤。 可以通過以下幾種方式進行解決: 在標頭檔案加上防止重定義的巨集: #ifndef FileName_H_#defi
全域性變數在標頭檔案中“定義”
看著標題,定義上面加了一個引號,這個得注意了。怎麼解釋呢,一般而言,變數只能定義在.c檔案中,宣告變數才在.h檔案中。下面就打破常規,把定義變數的語句放在.h檔案中,但是對實際而言,變數定義在標頭檔案中是表面上的。 下面直接給出程式碼,有三個
為什麼inline函式應該在標頭檔案中定義?
inline函式(即行內函數)對編譯器而言必須是可見的,以便能夠在呼叫點展開該函式,與非inline函式不同的是,inline函式必須在呼叫該函式的每個檔案中定義。當然,對於同一程式的不同檔案,如果inline函數出現的話,其定義必須相同。 正因為如此,建議把
c++在標頭檔案中定義全域性變數時需要注意的地方
我們知道,在 C++(但不是在 C 語言)中,const 限定符對預設儲存型別稍有影響。在預設情況下,全域性變數的連結性為外部的,但 const 全域性變數的連結性為內部的。也就是說,在 C++ 看來,全域性 const 定義就像使用了 static 說明符一樣。
C/C++語言在標頭檔案中定義全域性變數
轉載:http://blog.csdn.net/chenqiai0/article/details/8490665 全域性變數可不可以定義在可被多個.C檔案包含的標頭檔案中?為什麼? 可以,在不同的C檔案中以static形式來宣告同名全域性變數。標頭檔案中不可以直接定
inline函式必須在標頭檔案中定義嗎?
前不久在寫程式碼的時候遇到一個link錯誤,程式碼的原型如下所示,基本就是定義了一個基類和派生類,在派生類的一個成員函式中用到了基類定義的一個行內函數。 [cpp] view plaincopyprint? // base.hclass Base { protected: void
標頭檔案中定義static靜態變數的利弊
對於儲存位置:靜態變數的效果和全域性變數的效果是一樣的,他們都儲存在全域性資料區。頻繁使用其實效率更高,如果定義的靜態變數不用,那就會浪費記憶體,因為全域性資料區生命週期是從程式執行到結束。 區域性變數:每次棧上都要為區域性變數分配空間,因此區域性變數太多
C++ 防止標頭檔案重複引用
C++標頭檔案的重複引用 就有點類似於鑽石繼承(菱形繼承) 比如有 a.h b.h c.h和d.h四個標頭檔案 其中,b和c需要#include"a.h" 而d需要#include"b.h" #include"c.h" 這樣編譯的時候肯定會報錯,因為d包含了兩次a.h.