1. No parametric polymorphism, but I'll let you move the goal post with us macro-ing a bunch of monomorphized nullable pointer types. It still sucks because
2. No static checks against nullable values in the non-Maybe case, no ergonomic pattern matching in the maybe-case
Moreover, let's be real. Nobody writes new C in a vacuum, and given that that ecosystem is very mature, there's no changing course now. But safety techniques are only as good as their weakest link---their use must be enforced everywhere. The damage is done and irreparable with C.
C doesn't even have parametric polymorphism, I'm not sure how you're imagining this can be done.
You could possibly use macro programming to do it “generically” at a level outside the type system.