繁体   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