Mac Tool For Checking If C Headers Are Needed
For more in-depth documentation, see docs.
Instructions for Users
'Include what you use' means this: for every symbol (type, function, variable, or macro) that you use in foo.cc (or foo.cpp), either foo.cc or foo.h should include a .h file that exports the declaration of that symbol. (Similarly, for foo_test.cc, either foo_test.cc or foo.h should do the including.) Obviously symbols defined in foo.cc itself are excluded from this requirement.
This puts us in a state where every file includes the headers it needs to declare the symbols that it uses. When every file includes what it uses, then it is possible to edit any file and remove unused headers, without fear of accidentally breaking the upwards dependencies of that file. It also becomes easy to automatically track and update dependencies in the source code.
- While the Mac is rarely targeted for security exploits and viruses, it's no stranger to software piracy—likely because Mac apps are pretty easy to crack.
- A header file actually not needed by the module(.c,.cpp) at all A header file is need by the module but being included more than once, directly, or indirectly. There's 2 ways in my experience that works well to detecting it.

CAVEAT
This is alpha quality software -- at best (as of July 2018). It was originally written to work specifically in the Google source tree, and may make assumptions, or have gaps, that are immediately and embarrassingly evident in other types of code.
There are two types of header files: the files that the programmer writes and the files that comes with your compiler. You request to use a header file in your program by including it with the C preprocessing directive #include, like you have seen inclusion of stdio.h header file, which comes along with your compiler. Do you have questons or comments about Mac Tools? Call 1-877-MACTOOLS. Mac Tools Too l Trucks – Own Your Own Automotive Tool Franchise and Be Your Own Boss™ In addition to manufacturing a wide variety of outstanding automotive tools, Mac Tools provides one of the best franchise opportunities available to qualified candidates with a passion for the automotive industry. Cppcheck is a static analysis tool for C/C++ code. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs. It provides unique code analysis to detect bugs and focuses on detecting undefined behaviour and dangerous coding constructs.
While we work to get IWYU quality up, we will be stinting new features, and will prioritize reported bugs along with the many existing, known bugs. The best chance of getting a problem fixed is to submit a patch that fixes it (along with a test case that verifies the fix)!
How to Build
Include-what-you-use makes heavy use of Clang internals, and will occasionally break when Clang is updated. Usually such discrepancies are detected by build bot and fixed promptly. The master branch follows Clang trunk.
We also have convenience tags and branches for released versions of Clang (called clang_<version>, e.g. clang_5.0). To build against a Clang release, check out the corresponding branch in IWYU before configuring the build. More details in the instructions below.
We assume you already have compiled LLVM and Clang libraries on your system, either via packages for your platform or built from source. You can use this mapping table to combine Clang and IWYU versions correctly:
| Clang | IWYU version | IWYU branch |
|---|---|---|
| 3.6 | 0.4 | clang_3.6 |
| 3.7 | 0.5 | clang_3.7 |
| 3.8 | 0.6 | clang_3.8 |
| 3.9 | 0.7 | clang_3.9 |
| 4.0 | 0.8 | clang_4.0-r2 |
| 5.0 | 0.9 | clang_5.0 |
| 6 | 0.10 | clang_6.0 |
| 7 | 0.11 | clang_7.0 |
| 8 | 0.12 | clang_8.0 |
| 9 | 0.13 | master |
NOTE: If you use the Debian/Ubuntu packaging available from https://apt.llvm.org, you'll need the following packages installed:
llvm-<version>-devlibclang-<version>-devclang-<version>
Packaging for other platforms will likely be subtly different.
To set up an environment for building:
Create a directory for IWYU development, e.g.
iwyuClone the IWYU Git repo:
Presumably, you'll be building IWYU with a released version of LLVM and Clang, so check out the corresponding branch. For example, if you have Clang 6.0 installed, use the
clang_6.0branch. IWYUmastertracks LLVM & Clang trunk:Create a build root and use CMake to generate a build system linked with LLVM/Clang prebuilts:
(substitute the
llvm-6.0orllvm-7suffixes with the actual version compatible with your IWYU branch)or, if you have a local LLVM and Clang build tree, you can specify that as
CMAKE_PREFIX_PATHfor IWYU 0.11 and later:Once CMake has generated a build system, you can invoke it directly from
build, e.g.
Instructions for building Clang are available at https://clang.llvm.org/get_started.html.
How to Install
If you're building IWYU out-of-tree or installing pre-built binaries, you need to make sure it can find Clang built-in headers (stdarg.h and friends.)
Clang's default policy is to look in path/to/clang-executable/../lib/clang/<clang ver>/include. So if Clang 3.5.0 is installed in /usr/bin, it will search for built-ins in /usr/lib/clang/3.5.0/include.
Clang tools have the same policy by default, so in order for IWYU to analyze any non-trivial code, it needs to find Clang's built-ins in path/to/iwyu/../lib/clang/3.5.0/include where 3.5.0 is a stand-in for the version of Clang your IWYU was built against.
Note that some distributions/packages may have different defaults, you can use clang -print-resource-dir to find the base path of the built-in headers on your system.
So for IWYU to function correctly, you need to copy the Clang include directory to the expected location before running (similarly, use include-what-you-use -print-resource-dir to learn exactly where IWYU wants the headers).
This weirdness is tracked in issue 100, hopefully we can make this more transparent over time.
How to Run
The original design was built for Make, but a number of alternative run modes have come up over the years.
Plugging into Make
The easiest way to run IWYU over your codebase is to run
or
(include-what-you-use always exits with an error code, so the build system knows it didn't build a .o file. Hence the need for -k.)
Include-what-you-use only analyzes .cc (or .cpp) files built by make, along with their corresponding .h files. If your project has a .h file with no corresponding .cc file, IWYU will ignore it unless you use the --check_also switch to add it for analysis together with a .cc file.
Using with CMake
CMake has grown native support for IWYU as of version 3.3. See their documentation for CMake-side details.
The CMAKE_CXX_INCLUDE_WHAT_YOU_USE option enables a mode where CMake first compiles a source file, and then runs IWYU on it.

Use it like this:
or, on Windows systems:
The option appears to be separately supported for both C and C++, so use CMAKE_C_INCLUDE_WHAT_YOU_USE for C code.
Note that with Microsoft's Visual C++ compiler, IWYU needs the --driver-mode=cl argument to understand the MSVC options from CMake.
Using with a compilation database
The iwyu_tool.py script predates the native CMake support, and works off the compilation database format. For example, CMake generates such a database named compile_commands.json with the CMAKE_EXPORT_COMPILE_COMMANDS option enabled.

The script's command-line syntax is designed to mimic Clang's LibTooling, but they are otherwise unrelated. It can be used like this:
or, on Windows systems:
Unless a source filename is provided, all files in the project will be analyzed.
See iwyu_tool.py --help for more options.
Mac Tool For Checking If C Headers Are Needed In Minecraft
Applying fixes
We also include a tool that automatically fixes up your source files based on the IWYU recommendations. This is also alpha-quality software! Here's how to use it (requires python):
If you don't like the way fix_includes.py munges your #include lines, you can control its behavior via flags. fix_includes.py --help will give a full list, but these are some common ones:
-b: Put blank lines between system and Google includes--nocomments: Don't add the 'why' comments next to includes
Mac Tool For Checking If C Headers Are Needed Me
How to Correct IWYU Mistakes
- If
fix_includes.pyhas removed an#includeyou actually need, add it back in with the comment '// IWYU pragma: keep' at the end of the#includeline. Note that the comment is case-sensitive. - If
fix_includes.pyhas added an#includeyou don't need, just take it out. We hope to come up with a more permanent way of fixing later. - If
fix_includes.pyhas wrongly added or removed a forward-declare, just fix it up manually. - If
fix_includes.pyhas suggested a private header file (such as<bits/stl_vector.h>) instead of the proper public header file (<vector>), you can fix this by inserting a specially crafted comment near top of the private file (assuming you can write to it): '// IWYU pragma: private, include 'the/public/file.h''.
Current IWYU pragmas are described in IWYUPragmas.
- C Programming Tutorial
- C Programming useful Resources
- Selected Reading
If you want to set up your environment for C programming language, you need the following two software tools available on your computer, (a) Text Editor and (b) The C Compiler.
Text Editor
This will be used to type your program. Examples of few a editors include Windows Notepad, OS Edit command, Brief, Epsilon, EMACS, and vim or vi.
The name and version of text editors can vary on different operating systems. For example, Notepad will be used on Windows, and vim or vi can be used on windows as well as on Linux or UNIX.
The files you create with your editor are called the source files and they contain the program source codes. The source files for C programs are typically named with the extension '.c'.
Before starting your programming, make sure you have one text editor in place and you have enough experience to write a computer program, save it in a file, compile it and finally execute it.
The C Compiler
The source code written in source file is the human readable source for your program. It needs to be 'compiled', into machine language so that your CPU can actually execute the program as per the instructions given.
The compiler compiles the source codes into final executable programs. The most frequently used and free available compiler is the GNU C/C++ compiler, otherwise you can have compilers either from HP or Solaris if you have the respective operating systems.
The following section explains how to install GNU C/C++ compiler on various OS. We keep mentioning C/C++ together because GNU gcc compiler works for both C and C++ programming languages.
Installation on UNIX/Linux
If you are using Linux or UNIX, then check whether GCC is installed on your system by entering the following command from the command line −
If you have GNU compiler installed on your machine, then it should print a message as follows −
If GCC is not installed, then you will have to install it yourself using the detailed instructions available at https://gcc.gnu.org/install/
This tutorial has been written based on Linux and all the given examples have been compiled on the Cent OS flavor of the Linux system.
Installation on Mac OS
If you use Mac OS X, the easiest way to obtain GCC is to download the Xcode development environment from Apple's web site and follow the simple installation instructions. Once you have Xcode setup, you will be able to use GNU compiler for C/C++.
Xcode is currently available at developer.apple.com/technologies/tools/.
Mac Tool For Checking If C Headers Are Needed
Installation on Windows
To install GCC on Windows, you need to install MinGW. To install MinGW, go to the MinGW homepage, www.mingw.org, and follow the link to the MinGW download page. Download the latest version of the MinGW installation program, which should be named MinGW-<version>.exe.
While installing Min GW, at a minimum, you must install gcc-core, gcc-g++, binutils, and the MinGW runtime, but you may wish to install more.
Add the bin subdirectory of your MinGW installation to your PATH environment variable, so that you can specify these tools on the command line by their simple names.
Mac Tool For Checking If C Headers Are Needed Synonym
After the installation is complete, you will be able to run gcc, g++, ar, ranlib, dlltool, and several other GNU tools from the Windows command line.