clang -O2 -Wall -Wextra -Werror=implicit-function-declaration locale/uselocale.c -o locale/uselocale -D_GNU_SOURCE -D_BSD_SOURCE -D_ALL_SOURCE -D_DEFAULT_SOURCE -lm -lintl locale/uselocale.c:12:24: error: implicit declaration of function 'uselocale' is invalid in C99 [-Werror,-Wimplicit-function-declaration] locale_t old_locale = uselocale(locale); ^ locale/uselocale.c:12:24: note: did you mean 'setlocale'? /usr/include/locale.h:90:7: note: 'setlocale' declared here char *setlocale(int, const char *) __RENAME(__setlocale50); ^ locale/uselocale.c:12:11: warning: incompatible integer to pointer conversion initializing 'locale_t' (aka 'struct _locale *') with an expression of type 'int' [-Wint-conversion] locale_t old_locale = uselocale(locale); ^ ~~~~~~~~~~~~~~~~~ locale/uselocale.c:15:13: warning: incompatible integer to pointer conversion assigning to 'locale_t' (aka 'struct _locale *') from 'int' [-Wint-conversion] old_locale = uselocale((locale_t) 0); ^ ~~~~~~~~~~~~~~~~~~~~~~~ 2 warnings and 1 error generated.