Line 4 is the actual include, which calls a macro to generate a file name from __GNUC__, a built-in macro that returns the hard-coded version number of the compiler. Line 3 defines the header file generation macros, using an extra macro definition with a single preceding underscore (line 2). The extra macro definition is necessary to invoke token pasting on the value of the parameter x (rather than the symbol x itself). The macro on line 1 then stringifies (with operator #) the resulting header file name, turning C tokens into a C string, yet another feature of the preprocessor.
If this example wasn’t confusing enough, token pasting can even muck with types, since any C token can be constructed by pasting, including type names. The following example, also from the Linux kernel, constructs different type names depending on whether we want to build for a 32-bit or 64-bit architecture.
BITS_PER_LONG is either 64 or 32 depending on another configuration option. Trying to reason about this piece of code is tricky, particularly for an automated tool that, for instance, looks for bugs or does refactoring.