During the preprocessing phase, you can report errors by using the #error preprocessor directive. For example, suppose you have a program that uses 64-bit integers. This program has to be ported to various platforms. Since C++ doesn't define a standard 64-bit int type yet, each compiler uses a different type, and some compilers don't support 64-bit integers at all. A portable program can use the following preprocessor directives to make sure that the use of 64-bit integers is transparent to the target compiler. If the target compiler doesn't support 64-bit integers, the #error directive causes it to produce a diagnostic message that includes a user-supplied string and stops the compilation process:

#if defined((__BORLANDC__) || defined(__VISUALC32__)) 
#  define INT64 __int64 // then use the __int64 type
#elif defined(__GNUC__) // GCC doesn't support __int64
#  define INT64 long long // but uses 'long long' instead
#  error “Unsupported platform; aborting”