I always found this special-casing of headers for kernel vs user unnecessary and complicating. In the many embedded runtimes I maintain, I've moved towards using standard POSIX-y and C(++) standard headers everywhere. I know kernel folks love to believe that their world is special so all the usual C library stuff needs to be done differently, but it's not needed.
It's so much easier to port code between the two worlds when you don't have to litter the #include prelude of every C file with conditionals.
It's so much easier to port code between the two worlds when you don't have to litter the #include prelude of every C file with conditionals.