1. A method for determining if a user typed one preprocessor directive symbol but intended to type another preprocessor directive symbol, the method comprising: creating a set of defined preprocessor directive symbols including unique preprocessor directive symbols defined in one or more build or sub-build files of a software program, creating the set of defined preprocessor directive symbols including analyzing the one or more build or sub-build files for a preprocessor directive and recording symbols immediately following the preprocessor directive as a defined preprocessor directive symbol in the set of defined preprocessor directive symbols; creating a set of used preprocessor directive symbols including unique preprocessor directive symbols defined in one or more source code files of the software program, creating the set of used preprocessor directive symbols including analyzing the one or more source code files for the preprocessor directive and recording symbols immediately following the preprocessor directive as a used preprocessor directive symbol in the set of used preprocessor directive symbols; creating a set of accurately used preprocessor directive symbols that includes only preprocessor directive symbols in the set of used preprocessor directive symbols and the set of defined preprocessor directive symbols; creating a set of unused preprocessor directive symbols that includes preprocessor directive symbols in the set of defined preprocessor directive symbols and not in the set of used preprocessor directive symbols by including preprocessor directive symbols in the set of defined preprocessor directive symbols and not in the set of accurately used preprocessor directive symbols in the set of unused preprocessor directive symbols; creating a set of undefined preprocessor directive symbols that includes preprocessor directive symbols in the set of used preprocessor directive symbols and not in the set of defined preprocessor directive symbols by including preprocessor directive symbols in the set of used preprocessor directive symbols and not in the set of accurately used preprocessor directive symbols in the set of undefined preprocessor directive symbols; identifying a preprocessor directive symbol that is in the set of unused preprocessor directive symbols; comparing the identified preprocessor directive symbol to each preprocessor directive symbol in the set of undefined preprocessor directive symbols by respectively applying a heuristic to the identified preprocessor directive symbol and each preprocessor directive symbol from the set of undefined preprocessor directive symbols; determining a likelihood that the identified preprocessor directive symbol is presented erroneously as a respective preprocessor directive symbol of the set of undefined preprocessor directive symbols based on a result of applying the heuristic; comparing each determined likelihood to a threshold value; and providing a warning in response to a determined likelihood being greater than the determined threshold.