C 標頭檔案重複編譯問題 標頭檔案重複編譯

時間 2023-02-15 11:35:05

1樓:匿名使用者

不會重複包含,你一開始用的巨集。

#ifndef cuser_h

#define cuser_h

就是防止重複包含的。

另外,你可以不包含,然後在user前面做一個前置宣告:class string;

然後把類成員 str宣告為指標,在cpp檔案裡面在引入標頭檔案。

後面一種是比較好的做法。

標頭檔案重複編譯

2樓:匿名使用者

只要簡單的理解為用標頭檔案裡面的內容替換#include的地方,就可以了。

之所以會重複編譯,是因為你的標頭檔案有可能相互直接include或者間接include,直接點比如你中直接使用兩次#include ""又中有定義函式scanf();

編譯時,編譯器會找到兩個scanf()函式體,編譯失敗。

而加上#ifndef _dedd

#define _dedd

#include""

#endif

(在任何引用標頭檔案的時候都這樣寫),那麼,在第一次編譯器把包含過來後,後面#include ""的地方都會檢測到 _dedd已經 define了,所以不會再包含該標頭檔案。

3樓:張申誠

他的意思是如果_dedd=1就不執行#include「

c++ 標頭檔案中函式重複定義問題

4樓:_鈊_煩_薏亂

當然,你應該將定義都放到。cpp中。.h中只放宣告就沒事了。

如果是全域性變數,就在。h中用extern宣告,然後在。cpp中定義就是了。

5樓:匿名使用者

一個函式可以申明多次, 可是隻能定義一次,這是規定!

6樓:匿名使用者

一個函式可以申明多次, 可是隻能定義一次,這是規定。

應該將定義都放到。cpp中。.h中只放宣告就沒事了。

如果是全域性變數,就在。h中用extern宣告,然後在。cpp中定義就是了。

c++這個詞在中國大陸的程式設計師圈子中通常被讀做「c加加」,而西方的程式設計師通常讀做「c plus plus」,「cpp」。 它是一種使用非常廣泛的計算機程式語言。c++是一種靜態資料型別檢查的、支援多重程式設計正規化的通用程式設計語言。

它支援過程化程式設計、資料抽象、物件導向程式設計、泛型程式設計等多種程式設計風格。最新正式標準c++於2023年8月18日公佈。其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大程式設計師受用的最強大程式語言之一,支援類:

類、封裝、過載等特性。

c++標頭檔案編譯重編譯

7樓:哈倫德拉

#if !defined b_h

#define b_h

把的內容全容包括在這裡面。

#endif

c++多檔案編譯,如果兩個標頭檔案都需要包含另一個標頭檔案,而這兩個標頭檔案又要被第四個檔案包含,怎麼辦

8樓:哦米噶滴

假如你現在有 三個標頭檔案,a b c三個程式都要呼叫。

這時候你可以這樣,比如a b c三個程式都要用到#include 那麼他們的標頭檔案裡你可以這樣寫。

#ifndef string_abc_h

#define string_abc_h

#include

#endif

這樣當編譯器第一次編譯string的時候就已經定義巨集了。。下次遇到同樣的巨集就會跳過。

9樓:匿名使用者

#ifndef #define ..#endif

應該可以的啊,你標頭檔案要用大寫的。用a_h別用。

在c/c++中如何避免標頭檔案被多次包含?

10樓:米莫的菜

標頭檔案的最開始。

加入這條雜注,就能夠保證標頭檔案只被編譯一次。

#pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。

#ifndef,#define,#endif是c/c++語言中的巨集定義,通過巨集定義避免檔案多次編譯。所以在所有支援c++語言的編譯器上都是有效的,如果寫的程式要跨平臺,最好使用這種方式具體寫法方式一:#ifndef __somefile_h__

#define __somefile_h__

...一些宣告語句#endif方式二:#pragma once

...一些宣告語句比較#ifndef的方式依賴於巨集名字不能衝突,這不光可以保證同一個檔案不會被包含多次,也能保證內容完全相同的兩個檔案不會被不小心同時包含。

當然,缺點就是如果不同標頭檔案的巨集名不小心「撞車」,可能就會導致標頭檔案明明存在,編譯器卻硬說找不到宣告的狀況。

#pragma once則由編譯器提供保證:同一個檔案不會被包含多次。

注意這裡所說的「同一個檔案」是指物理上的一個檔案,而不是指內容相同的兩個檔案。

。帶來的好處是,你不必再費勁想個巨集名了,當然也就不會出現巨集名碰撞引發的奇怪問題。對應的缺點就是如果某個標頭檔案有多份拷貝,本方法不能保證他們不被重複包含。

當然,相比巨集名碰撞引發的「找不到宣告」的問題,重複包含更容易被發現並修正。

方式一由語言支援所以移植性好,方式二 可以避免名字衝突。

我還看到一種用法是把兩者放在一起的:

#pragma once

#ifndef __somefile_h__

...一些宣告語句#endif看起來似乎是想兼有兩者的優點。

c語言,標頭檔案總是無法在編譯**錯

11樓:匿名使用者

可能是你編譯器設定的問題,看看設定的預設目錄是否正確。另外當前目錄包含標頭檔案用雙引號不用尖括號即:

#include ""

12樓:洪蠍

include這個單詞是正確的。

如何處理c++標頭檔案重複定義問題

13樓:奔跑de小白鹿

在標頭檔案中只申明,不要定義 像這些 char raw[30][50]; int line=0; 統統這樣定義 extern char raw[30][50]; extern int line; 然後在某個檔案中去定義 在標頭檔案中只申明,不要定義 像這些 char raw[30][50]; int line=0;

c防止標頭檔案重複include問題

踏岸尋柳 都是為了避免同一個檔案被include多次 1 ifndef方式 2 pragma once方式 在能夠支援這兩種方式的編譯器上,二者並沒有太大的區別,但是兩者仍然還是有一些細微的區別。方式一 ifndef somefile h define somefile h 一些宣告語句 endif...

c語言寫標頭檔案定義巨集的問題,C語言寫標頭檔案定義巨集的問題

兔子和小強 ifndef a h define a h endif 就是如果沒有定義a h那麼就定義a h,並執行.這樣就避免了重複include的問題。標頭檔案叫file 那麼一般 ifndef file h 這是c的風格,也可以取一個唯一的其他識別符號 預編譯 內的防止重複編譯就是這樣做的,比如...

c語言中的標頭檔案是什麼概念,c語言標頭檔案的是幹什麼用的?

標頭檔案是你程式中需要用到東西,如需要某個數學函式,則必須包括數學相關標頭檔案,如math.h,當然,也可以自己寫函式,只要你不怕麻煩!標頭檔案是你程式中需要用到東西,如需要某個數學函式,則必須包括數學相關標頭檔案,如math.h,當然,也可以自己寫函式,只要你不怕麻煩!標頭檔案就是在你所編制的程式...