No, not if they were written correctly.
When you write a header file, use a guard define
. It's discussed and a short example is given in Wikipedia's Header file
int add(int a, int b);
As you can see, the contents of the file will only be used if the macro ADD_H_GUARD has been defined and the first thing the header file does is to #define ADD_H_GUARD. So the first time this header file is included, the ADD_H_GUARD is not defined so the contents are used, a side-effect of which is that ADD_H_GUARD gets defined. Then every other time that the header file gets included in the same compilation (remember that each source file is compiled separately as a separate compilation), ADD_H_GUARD is already defined so the contents of the header file are ignored. End result: no duplicate declarations in the header files.
Wikipedia calls guard defines "include guards
". An alternative is to use the pragma once
The standard library header files use guard defines. For example, here's the contents of iostream in MinGW gcc:
// -*- C++ -*- forwarding header.
// This file is part of the GNU ANSI C++ Library.
And, of course, iostream.h does the same.