These warning messages come from the pre-processing pass of the compiler. Athough the compiler and pre-processor are integrated into the same executable, it is worth distinguishing the pre-processor warning messages from those generated by the compiler proper.

## bad digit 'digit' in number

When evaluating a pre-processor expression the pre-processor encountered a malformed octal, decimal, or hexadecimal number.

## bad token 'token' produced by ##

A bad pre-processing token has been produced when using the token pasting operator `##`. This error is extremely unlikely to occur in your code.

## character constant taken as not signed

Characters with ASCII codes greater than 127 are treated as unsigned numbers by the pre-processor.

## end of file inside comment

The pre-processor came to the end of file whilst processing a comment. This is usually an error: comments cannot extend across source files.

## multi-byte character constant undefined

Multi-byte character constants are not supported by the pre-processor when evaluating expressions.

## no newline at end of file

The last character in the file is not a new line. Although this isn't an error, it may help portability of your code if you include a new line at the end of your file.

## syntax error in #if/#endif

There's a general problem in the way you've used the `#if` or `#endif` control

## unknown pre-processor control 'control'

The pre-prpocessor control `#` control isn't a valid ANSI pre-processor control. Usually this is caused by a spelling error.

## undefined escape '\char' in character constant

When evaluating a pre-processor expression the pre-processor encountered an escape sequence `\` char which isn't defined by the ANSI standard.

## wide character constant undefined

Wide character constants are not supported by the pre-processor when evaluating expressions.