zoukankan      html  css  js  c++  java
  • 头文件重复包含问题的一点笔记

    一直没怎么写过多文件的C/C++工程,也没几次碰到头文件重复包含导致类型重定义的问题。今天遇到了一次多文件头文件混乱的情况,出现了有的变量未定义。给每一个cpp文件加上对应的头文件include,却出现了类型重定义的问题。搜索之,得到的是头文件重复包含的问题。对于问题以及相应的解决方法,参考网上一些资料,总结以便后续参考。

    同样的头文件重复包含,会被预处理器展开多次,这样便会出现相同名称的类型,自然就会出现类型重定义了。为了避免头文件重复包含,有两种解决方法:一是使用#ifndef的方法,还有一种是使用#pragma once的方法。传统上,会使用#ifndef的方法,这种方法能够具有较好的兼容性和可移植性,缺点就是比较麻烦,宏名容易撞车,而且预处理器会全部展开这些头文件,然后判断是否存在宏定义,再使用条件编译的方法,这样效率较低下。#pragma once是微软编译器所特有的一种避免重复包含的预处理指令,其原理是只让文件被展开一次。优点是效率高,缺点是不能避免相同内容的文件被重复包含。

    我在使用VS2015时,只要是新建头文件,都会出现这条指令。而在我所见的C++ Primer Plus、Data Structure and Algorithm Analysis in C等书中,则是使用的ifndef条件编译的方法。记得看过华为培训C程序员的PPT,其中有一条,就是要理清头文件互相包含的关系,再进行包含。毕竟包含混乱的头文件可能会被展开很多次,即使不出现意外,也会大大影响编译速度。所以以后再写多文件工程时,一定要努力分清每个文件的互相包含关系,这样才能避免很多麻烦。至于OJ刷题,反正都是单文件单main函数,把STL所有头都include也没有多大问题了。

  • 相关阅读:
    Qt 数据库篇
    js字符串函数(转)
    如何解决IE无法识别html5中的新标签(article、abbr、header等)
    web多页打印问题
    诡异的Spinner级联样式
    discuz x2用户删除了,帖子不能用了,恢复帖子的办法
    创业公司如何招聘优秀工程师
    清除目录下的SVN信息
    .NET 项目SVN 全局排除设置
    编程技术面试的五大要点
  • 原文地址:https://www.cnblogs.com/ggggg63/p/6406202.html
Copyright © 2011-2022 走看看