簡體   English   中英

ifdef / ifndef的解決方法

[英]Workaround for ifdef / ifndef

我有一個A類,以及兩個繼承自ABC

除了A的方法外,每個類都提供不同的東西,因此,我想將它們放在兩個不同的文件中b.hppc.hpp ,因為它們是帶有內聯函數的模板。

我也有一個User類,同時使用BC類。 user.cpp ,我應該接近:

# include "b.hpp"
# include "c.hpp"

class User{
    ...;
};

這將引發編譯器重新定義錯誤,因為我將BC都保留在bc.hpp

這里的關注點是美學上的問題,而不是編程錯誤:我只是在小型應用程序中使用ifdef / ifndef指令找不到很好的選擇 -在我看來,它們始終像IDE的解決方案,適用於管理過多模塊的人員,對於那些甚至不了解這些模塊的人了解指令。

是否有任何解決方法( 甚至是非標准方法,但至少是明智的方法),還是我必須堅持在同一文件中使用兩個不同的類並使用ifdef / ifndef

如果您在頭文件中表示不,則沒有一種可移植的好方法。 標准做法是將所有頭文件的格式保持為-

#ifndef MYHEADER_HPP
#define MYHEADER_HPP

// ... content

#endif

任何其他方式都是非標准的,不是真正的 C ++。

您始終可以使用#pragma once

ifndef確實是好的做法。 它們可以幫助您使文件標頭自成體系

您不希望某些文件A停止編譯,因為您刪除了另一個文件B某處的include語句C 因此,在AB中都包含C 也許A包括B ,但這並不重要。 否則,你就必須添加include CB當你刪除include CA

因此, ifndef確實是好的做法,應該使用。 根據您的編譯器的不同,您可能有一次語法上的捷徑,例如一次編譯指示在此處查找討論),但是請記住,即使大多數編譯器都支持,這也不是標准的。

順便說一句,專業的生產代碼確實使用了ifndef保護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM