Standard C and C++ provide the "magic identifier" __func__, which acts as if it were the name of a static char array containing the name of the current function. (Actually the value is implementation-defined in C++.)

gcc, as an extension, provides __PRETTY_FUNCTION__, which is identical to __func__ for C, and provides some additional information for C++.

That doesn't solve the problem you're asking about, which is that string literal concatenation applies only to string literals.

You say your crash() function takes a single string as an argument.

I suggest either modifying crash() so it takes two arguments, or writing a new wrapper function that takes two arguments. You can then use:

#define NIMPL crash(__PRETTY_FUNCTION__, " not implemented yet")

(Since you're using C++ you can overload it with the same name.) Concatenating the two strings is left as an exercise.

You could also add a second string argument to your existing crash() function and give it a default value of "" to avoid breaking existing calls.