title: Avoiding double inclusion: Preprocessor directive vs. makefiles
body: <p>I'm working on moving from frankenstein and one-file thousands-of-lines programs to well structured and organized, multi-file programs.  Right now what seems to be natural (naively) is to make a love-triangle of header inclusions for three of my files:<br>
  file_1 includes file_2, file_4<br>
  file_2 includes file_3, file_4<br>
  file_3 includes file_1 .... etc etc<br>
  These files have variables, methods, structs, etc that I need between other files.  </p>
  
  <p>And of course I'm getting double inclusion errors.</p>
  
  <p><strong>My question:</strong> should I avoid these problems by using preprocessor directives in headers (e.g. including structs, methods, etc. entirely in the header), or should I be compiling using a makefile (which I hear can also be used to resolve this problem---but I've never made one)?</p>