When I use strdup
in Microsoft Visual C++, it warns me:
warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. See online help for details.
Thus it seems _strdup
is correct.
But when I use _strdup
in GCC (Fedora Linux OS), the compiler shows an error:
error: ‘_strdup’ was not declared in this scope
With GCC and Linux, compiler does not show any error for strdup
.
Which is correct - strdup
or _strdup
?
Note: I include <string.h>
in my code.
Which is correct?
strdup
is a perfectly correct POSIX function. Nevertheless, it doesn't belong to the standard, and the ANSI C standard reserves some (broad) classes of function names for further use. Among these, there are
therefore, the MS guys decided to replace strdup
with _strdup
.
I'd just continue using strdup
. It's unlikely the C committee will define strdup
to something else than POSIX. Either #define strdup _strdup
or silence the warning.
BTW I hope you see this applies to your functions with names like string_list
etc., too.