Como implementar uma macro assert compatível com o padrão com uma mensagem formatada opciona

Como implementar uma macro assert compatível com o padrão com uma mensagem formatada opciona

O que eu tenho funciona no clang, mas (corretamente) aciona o-Wgnu-zero-variadic-macro-arguments aviso se estiver ativado (por exemplo, via-Wpedantic) quando a macro é usada sem a mensagem opcional. Wandbox

#define MyAssert(expression, ...)                                      \
    do {                                                               \
        if(!(expression))                                              \
        {                                                              \
            printf("Assertion error: " #expression " | " __VA_ARGS__); \
            abort();                                                   \
        }                                                              \
    } while(0)

questionAnswers(3)

yourAnswerToTheQuestion