美文网首页C++
Clean C++:头文件保护宏

Clean C++:头文件保护宏

作者: 刘光聪 | 来源:发表于2019-06-04 09:25 被阅读0次

众所周知,每一个头文件都应该具有独一无二的保护宏,以阻止头文件被多次包含。

反模式

头文件保护宏具有宏定义的所有缺点,如果名字太短很容易造成冲突。例如,存在如下定义的一个头文件,仅仅使用文件名作为头文件保护宏,冲突的概率极高。

#ifndef MUTEX_H
#define MUTEX_H

// ...

#endif

命名模式:INCL_<PROJECT>_<MODULE>_<FILE>_H

使用INCL_<PROJECT>_<MODULE>_<FILE>_H的命名模式,可以有效增长宏定义的长度,降低了名字冲突的概率。但是,这样的命名方式存在一个严重的缺陷,当文件名重命名或移动目录时,需要同步修改头文件保护宏,以保持统一性。

// cub/concurrent/runnable.h
#ifndef INCL_CUB_CONCURRENT_MUTEX_H
#define INCL_CUB_CONCURRENT_MUTEX_H

// ...

#endif

UUID模式

推荐使用UUID命名头文件保护宏,能够有效保证其全局唯一性,而且当重命名或移动目录,都不需要修改该头文件保护宏。

#ifndef HA9D6B92F_3916_4AB0_82DD_CE931400B574
#define HA9D6B92F_3916_4AB0_82DD_CE931400B574

// ...

#endif

另外,可以通过配置IDE,自动随机地生成UUID,快捷、简单、安全、有效。例如,如下图配置Eclipse CDT自动生成UUID风格的头文件保护宏。

Eclipse CDT: UUID风格的头文件保护宏

相关文章

  • Clean C++:头文件保护宏

    众所周知,每一个头文件都应该具有独一无二的保护宏,以阻止头文件被多次包含。 反模式 头文件保护宏具有宏定义的所有缺...

  • 深入理解C++11 2.5 static_assert

    在C++中,标准在或者 头文件中未程序员提供了assert宏,例如: C++中,可以通过定义宏N...

  • 022 C++ 头文件保护

    目前头文件保护一般涉及到两个宏: #pragma once用来防止某个头文件被多次include;#ifndef,...

  • 使用awk命令将C/C++ 宏定义转换为Java定义

    使用awk命令将C/C++ 宏定义转换为Java定义 项目中Hal 层的头文件的宏定义数字需要被上层应用的Java...

  • 简述 C语言 有和 C++ 的基本区别,你真的懂吗?(新手面试必

    1、c和c++的头文件不同 c的头文件------#include c++的头文件---#include 2、输入...

  • 1.C++基础

    C++头文件 传统C头文件C++头文件hpp文件 命名空间 C++ 引入了新的概念,命名空间可以有效避免大型项目的...

  • C语言宏的使用

    判断C++调用 判断C版本号 处理重复引入头文件 判断是不是DEBUG模式 CMAKE设置宏 跨平台打包动态库

  • C/C++程序编译、链接和装入

    C++程序编译过程(以g++为例) 预处理 处理#开始的命令,得到不包含#指令的.i文件,包括替换宏、引入头文件...

  • 知识点

    1、memse()的头文件不同的包含 C中头文件C中为 或 C++中头文件C++中为

  • 头文件保护符

    头文件应该含有保护符,即使这些头文件不会被其他头文件包含。编写头文件保护符并不困难,而且如果头文件被包含多次,它可...

网友评论

    本文标题:Clean C++:头文件保护宏

    本文链接:https://www.haomeiwen.com/subject/mywkxctx.html