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

2023-05-04,


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)。正确的做法是将头文件的依赖降到最小,尽量在源文件中包含头文件,头文件中尽量用前置声明(尽量使用指针和引用,相关定义放到源文件中 等)。前置声明的类是不完全类型,不完全类型只能以有限方式使用。不能定义该类型的对象。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。

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

下载本文的Word格式文档,以方便收藏与打印。