diff --git a/include/bits/wchar.h b/include/bits/wchar.h
index 6eddf334de3e905371863299d1bc5260bed35a16..6838142e81b3855a87e4482ad782d169b4c66cc1 100644
--- a/include/bits/wchar.h
+++ b/include/bits/wchar.h
@@ -1,19 +1,32 @@
 #ifndef _BITS_WCHAR_H
 #define _BITS_WCHAR_H
 
-// NULL, size_t
+// int32_t, uint32_t, WCHAR_MIN, WCHAR_MAX
+#include <stdint.h>
+
+#ifndef _WCHAR_T
+#define _WCHAR_T
+    #ifndef __WCHAR_TYPE__
+        #define __WCHAR_TYPE__ int32_t
+    #endif
+    typedef __WCHAR_TYPE__ wchar_t;
+#endif // _WCHAR_T
+
+#ifndef _WINT_T
+#define _WINT_T
+    #ifndef __WINT_TYPE__
+        #define __WINT_TYPE__ uint32_t
+    #endif
+    typedef __WINT_TYPE__ wint_t;
+#endif // _WINT_T
+
+// NULL, size_t, must come after wchar_t and wint_t
 #define __need_size_t
 #define __need_NULL
 #include <stddef.h>
 
-// int32_t, uint32_t, WCHAR_MIN, WCHAR_MAX
-#include <stdint.h>
-
 #define WEOF (0xffffffffu)
 
-typedef int32_t wchar_t;
-typedef uint32_t wint_t;
-
 int wprintf(const wchar_t * fmt, ...);
 int fwprintf(FILE * stream, const wchar_t * fmt, ...);
 int swprintf(wchar_t *s, size_t n, const wchar_t * fmt, ...);