C macros

When doing an assignment I came across this strange statement:

#define ensure_successful_malloc(ptr)                           \
  if (ptr == NULL) {                                            \
    perror("Memory allocation unsuccessful for" #ptr "\n");     \
    exit(1);                                                    \

Turns out this is not really a function, but a macro.

You can use #define to define constants (which is what I saw so far), but you can use it for the above as well, to define macros.

Macros take arguments, which must be valid C identifiers. They then replace the callsites with the string expressions (which is why you should note the ’' character used to escape)

I guess the benefit is that code is inlined by the preprocessor?

See also