當前位置:首頁 » 編程語言 » c語言頭文件重復包含

c語言頭文件重復包含

發布時間: 2022-02-23 18:51:56

『壹』 c語言,在一個頭文件定義一個枚舉變數,有兩個C文件用#include包含了這個頭文件,編譯錯誤:重復聲明成員

頭文件里加防止重復定義的宏定義

#ifndef XXX_H
#define XXX_H
你的枚舉;
其他定義和聲明;
#endif

『貳』 VC如何解決重復包含頭文件的問題

語法上對頭文件里的內容沒有任何限制

c++語法有個要求就是任何名字(類型、變數或者函數什麼的)都要「先聲明後使用」,注意這個要求的范圍是在同一個文件里,就是說你這個.cpp里用到的東西必須在你這個.cpp里先有聲明。 如果你要用string類的變數, 你就必須先寫清楚這個類型的聲明,編譯器才知道怎麼去編譯這一段。 所以你要是不怕累的話你可以就挨個用到的地方重復寫一下,但是因為這個可能很麻煩, 也可能會幾個地方寫的不一致, 解決辦法就是採用一個頭文件,每個地方都include這個頭文件, 就相當於寫了這個類型的聲明。 include命令的作用就是把那個頭文件的內容復制到這里來, 至於頭文件裡面到底寫了什麼其實是沒有語法要求的,但是如上所述, 頭文件既然主要是解決這個聲明的問題, 所以當然你看到的頭文件里主要內容還都是聲明。 現在模板橫行的時候由於一些技術問題造成頭文件里也寫了很多實現, 這個解釋起來有點麻煩,你可以不搭理它

所以總結一下, C語言要求先聲明後使用,所以用頭文件來形成一個統一聲明, 而之所以要防止重復include頭文件,是因為一個cpp里一個名字是不可以被定義多次的, 所以對那些聲明=定義的東西如果重復include了,編譯的時候就容易出現重復定義的錯誤,當然對有些聲明跟定義截然分開的情況來說,重復include也沒問題

『叄』 關於自定義頭文件在多個文件中引用時提示重復定義的問題(C語言)

#ifndef identifier_h
#define identifier_h
....
#endif
這套條件編譯是為了防止同一個.c文件中包含多個相同.h文件的(比如有一個.c文件包含了a.h,a.h又包含了b.h,那麼當你在這個.c文件中同時包含了a.h和b.h時,因為有上面的條件編譯的關系而不會出錯)。因為編譯器在編譯的時候是按照.c文件為單位編譯的,每個.c文件編譯成.o文件(linux系統)或者.obj(windows系統),然後再將這些.o文件鏈接起來,最後與運行庫鏈接形成可執行文件(elf或exe文件)。

你在兩個.c文件中包含了同一個.h文件。這根本和條件編譯沒什麼關系。你在.h文件中定義了全局變數a, b, c。那麼就表示你兩個.c文件中,每個.c文件中都有這樣的全局變數定義:int a, b, c;當每個.c文件單獨編譯當然沒有問題,但是當它們鏈接起來的時候就出現問題了:兩個.c文件中都有變數a b c,所以當然是重復定義啊。問題是出在鏈接的時候的。

『肆』 C語言中防止重復包含頭文件的固定格式的疑問

1、當1個C語言程序由 多個 源程序文件 組成時,由於每個 源程序文件 都有 #include <...>
#include "...h", 最終它們可能形成交叉 包含 和 重復包含 現象 而造成錯誤。
為了避免這種情況發生,可以 採用 定義宏 的方法 把各個頭文件 包起來。
編譯器 在正式編譯的開始,現處理 宏 -- 也就是「預編譯命令".

2、例如:用 宏(#號開始的行) 把 頭文件內容 包起來:
#ifndef _HEADER_One_H_ // 意思是:宏開始行,如果還沒有定義 _HEADER_One_H_ 則 進入,否則退出

#define _HEADER_One_H_ //定義 _HEADER_One_H_//

header1.h
頭文件內容

#endif // 宏結束行

『伍』 C語言頭文件避免重復包含,pragma once和#ifndef的區別

1) #pragma once用來防止某個頭文件被多次include,
#pragma once是編譯相關,就是說這個編譯系統上能用,但在其他編譯系統不一定可以,也就是說移植性差,不過現在基本上已經是每個編譯器都有這個定義了。
2) #ifndef,#define,#endif用來防止某個宏被多次定義。
#ifndef,#define,#endif這個是C++語言相關,這是C++語言中的宏定義,通過宏定義避免文件多次編譯。

『陸』 c語言頭文件和c++頭文件有沒有相同或重復的

c裡面的c++基本全支持,c++多出來的c用不了

『柒』 這個問題,C語言,一個關於頭文件重復定義的問題!!!

1、
int
c;
這個算是定義,不是聲明,在編譯期間不會有問題,鏈接的時候會重定義,應該在頭文件中
extern
int
c;在.c文件中int
c;
這樣就不會出現重定義的問題了,你好好研究下定義跟聲明,編譯跟鏈接。
2、中間能包含一些特殊的定義,類定義,和inline函數定義等等,int
c;
這個算是定義,不是聲明,extern
int
c;這個算是聲明。。。

『捌』 (C語言)定義宏 以防止重復包含此頭文件 這句話是什麼意思

當1個C語言程序由 多個 源程序文件 組成時,由於每個 源程序文件 都有 #include <...>
#include "...h", 最終它們可能形成交叉 包含 和 重復包含 現象 而造成錯誤。

為了避免這種情況發生,可以 採用 定義宏 的方法 把各個頭文件 包起來。

編譯器 在正式編譯的開始,現處理 宏 -- 也就是「預編譯命令".

用 宏(#號開始的行) 把 頭文件內容 包起來:
#ifndef _HEADER_One_H_ // 意思是:宏開始行,如果還沒有定義 _HEADER_One_H_ 則 進入,否則退出

#define _HEADER_One_H_ //定義 _HEADER_One_H_//

header1.h
頭文件內容

#endif // 宏結束行

『玖』 C語言 頭文件重復包含問題 inndef 怎麼用

#ifndef BASE_H//如果沒有定義過 BASE_H ,就編譯下面的代碼
#define BASE_H//定義這個宏

#endif

在每一個.h文件,都使用這個編譯指令。即使多次 #include,也不會重復包含。
#ifndef BASE_H
如果首次 #include 這個.h文件,BASE_H 沒有被定義,所以這個.h文件就包含進來參與編譯,同時定義了BASE_H
後續再次 #include 這個 .h 文件,由於 BASE_H已經定義過,所以在對應的 #endif 前的代碼不參與編譯,就不會出現兩個基本信息結構體
----------------------
除了頭文件的包含,ifdef 也會用在其他地方,比如判斷編譯環境,
#ifndef _WIN64
#define NULL 0
#else
#define NULL 0LL
#endif

熱點內容
ftp虛擬目錄上傳文檔 發布:2025-07-13 10:51:18 瀏覽:640
香港雲伺服器建站有用嗎 發布:2025-07-13 10:46:26 瀏覽:435
安卓如何進入賞金賽 發布:2025-07-13 10:44:48 瀏覽:812
obd源碼android 發布:2025-07-13 10:43:59 瀏覽:795
編譯器錯誤cs0016 發布:2025-07-13 10:42:36 瀏覽:771
c語言二進制代碼 發布:2025-07-13 10:27:28 瀏覽:19
kc杯腳本 發布:2025-07-13 10:27:22 瀏覽:614
android選中變色 發布:2025-07-13 10:23:09 瀏覽:953
進程隱藏源碼 發布:2025-07-13 10:11:29 瀏覽:744
安卓如何實名認證和平精英 發布:2025-07-13 10:09:27 瀏覽:236