开发者

When not to use include guard in header file?

开发者 https://www.devze.com 2023-03-22 12:36 出处:网络
We all know when to use include guard, but when shall we not use it in our project? Recently, I saw a project with mix compilation (CUDA + GCC), one 开发者_如何转开发header file (CUDA file) is delibe

We all know when to use include guard, but when shall we not use it in our project?

Recently, I saw a project with mix compilation (CUDA + GCC), one 开发者_如何转开发header file (CUDA file) is deliberately left without include guard. I am just curious about it.


There are 2 scenarios off the top of my head:

  1. when you want to turn on/off debugging capabilities (as how assert.h works)
  2. for 'x-macro' type of functionality where you have the include file perform 2 parts of problem, such as defining an enum then defining an array of stringified names corresponding to the enums


One case in when you do want to include the same file several times with different parameters. In this case the include file would act as a sort of template. An example are the scalers on Dosbox.


In our projects we never use include guard. We are using include antiguard:

#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif

Because if you reincluded same header - you written wrong code or worked with wrong architecture.


Include guards are used so that the include file can be included multiple times in a single compilation unit without resulting in duplicate declarations.

Do not use include guards when the file should be included multiple times in a single compilation unit and this does not result in duplicate declarations.

0

精彩评论

暂无评论...
验证码 换一张
取 消