Keep in mind that the Win32 API has to support both C and C++, new and old, so it uses a lot of abstractions that allow it to do different things under different configurations to maintain a consistent interface. If you are targeting C++ only, especially C++11 or later, then there is simply no reason to use C_ASSERT over static_assert. static_assert is standard C++. C_ASSERT is a Microsoft-specific invention.
Regarding portability, you also have to ask if the code needs to be portable to older toolchains. I.e. if it is more likely to need to be built on an older visual studio that doesn't support it in the language than needing to be built on a non-Windows platform.
C_ASSERToverstatic_assert.static_assertis standard C++.C_ASSERTis a Microsoft-specific invention.static_assert(when<assert.h>is included).