码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++函数重复定义、头文件重复包含、互相包含问题

时间:2017-01-09 00:58:05      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:c   c++   头文件   预编译   


1、避免头文件重复包含


// test.h 此段宏的意思是如果定义了宏变量TEST_H_则不再定义它
#ifndef TEST_H_
#define TEST_H_
//头文件内容
#endif

或者

// test.h 告诉预编译器只包含一次
#pragma once


2、避免重复定义


  不要将函数定义放置在头文件里面,正确的做法是头文件放置函数声明,源文件放置函数定义。因为源文件是分别编译的,假如头文件放置了函数定义,包含该头文件的每一个源文件都会定义相应的函数,从而导致重复定义。但是几种情况可以例外:内联函数的定义、类的定义、const和static变量,以及模板类/函数要求头文件必须包含定义才可以模板化。


3、避免头文件互相包含和循环包含


  头文件互相包含会导致递归包含,头文件互相依赖的逻辑本身就是错误的而且无法实现,头文件循环包含同理(比如a.h包含b.h,b.h包含c.h,c.h包含a.h)。正确的做法是将头文件的依赖降到最小,尽量在源文件中包含头文件,头文件中尽量用前置声明(尽量使用指针和引用,相关定义放到源文件中 等)。前置声明的类是不完全类型,不完全类型只能以有限方式使用。不能定义该类型的对象。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。


本文出自 “李昊华的博客” 博客,请务必保留此出处http://lh2debug.blog.51cto.com/12490788/1890170

C/C++函数重复定义、头文件重复包含、互相包含问题

标签:c   c++   头文件   预编译   

原文地址:http://lh2debug.blog.51cto.com/12490788/1890170

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!