当前位置:  开发笔记 > 编程语言 > 正文

#include标头保护格式?

如何解决《#include标头保护格式?》经验,为你挑选了4个好方法。

我知道这对项目没有什么影响,但是,假设您使用#defined标头保护C++代码,您使用什么格式?例如假设一个标题foo.hpp:

#ifndef __FOO_HPP__
...

#ifndef INCLUDED_FOO_HPP
...

#ifndef SOME_OTHER_FORMAT

我卖的是关于大写#defines的想法,但不能解决这些守卫的格式.



1> Fionn..:

我总是在include guard中包含命名空间或相对路径,因为只有头名称才被证明是危险的.

例如,您有一些大型项目,其中包含代码中的两个文件

/myproject/module1/misc.h
/myproject/module2/misc.h

因此,如果您为包含保护使用一致的命名方案,则可能最终会_MISC_HPP__在两个文件中定义(非常有趣,以找到此类错误).

所以我安顿下来

MYPROJECT_MODULE1_MISC_H_
MYPROJECT_MODULE2_MISC_H_

这些名称相当长,但与双重定义的痛苦相比,这是值得的.

另一种选择,如果你不需要编译器/平台独立性,你可能会寻找一些#pragma once stuff.



2> MrZebra..:

我总是用 INCLUDED_FOO_HPP

我不会使用双下划线,因为保留了双下划线.



3> Martin Cote..:

为了真正避免名称冲突,我使用GUID:

#ifndef GUARD_8D419A5B_4AC2_4C34_B16E_2E5199F262ED


不太可能我的系统将包含与已知宇宙中的原子一样多的包含文件 - 除非我们有亚原子硬盘驱动器.

4> Johannes Sch..:

就个人而言,我只使用文件名FOO_HPP.Google使用整个路径,如SRC_ENGINE_FAST_HPP.

某些名称和函数签名集始终保留给实现:

每个包含双下划线(_ _)或以下划线后跟大写字母(2.11)开头的名称都保留给实现以供任何使用.

以下划线开头的每个名称都保留给实现,以用作全局名称空间中的名称.

(17.4.3.1.2/1)

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有