### Question 10.7

Is it acceptable for one header file to `#include` another?

It's a question of style, and thus receives considerable debate. Many people believe that ``nested `#include` files'' are to be avoided: the prestigious Indian Hill Style Guide (see question 17.9) disparages them; they can make it harder to find relevant definitions; they can lead to multiple-definition errors if a file is `#include`d twice; and they make manual Makefile maintenance very difficult. On the other hand, they make it possible to use header files in a modular way (a header file can `#include` what it needs itself, rather than requiring each `#include`r to do so); a tool like `grep` (or a tags file) makes it easy to find definitions no matter where they are; a popular trick along the lines of:

    	#ifndef HFILENAME_USED
    	#define HFILENAME_USED
    	...header file contents...
    	#endif

(where a different bracketing macro name is used for each header file) makes a header file ``idempotent'' so that it can safely be `#include`d multiple times; and automated Makefile maintenance tools (which are a virtual necessity in large projects anyway; see question 18.1) handle dependency generation in the face of nested `#include` files easily. See also question 17.10.

References: Rationale Sec. 4.1.2

Read sequentially: prev next up top

This page by Steve Summit // Copyright 1995 // mail feedback