Ami*_*yan 54 c c++ strdup visual-studio
当我strdup在Microsoft Visual C++中使用时,它警告我:
警告C4996:'strdup':不推荐使用此项目的POSIX名称.而是使用符合ISO C++的名称:_strdup.详细信息请参见在线帮助.
这似乎_strdup是正确的.
但是当我_strdup在GCC(Fedora Linux OS)中使用时,编译器显示错误:
错误:未在此范围内声明'_strdup'
使用GCC和Linux,编译器不会显示任何错误strdup.
哪个是正确的 - strdup或者_strdup?
注意:我包含<string.h>在我的代码中.
jpa*_*cek 34
哪个是对的?
strdup是一个完全正确的POSIX功能.然而,它不属于标准,ANSI C标准保留了一些(广泛)类别的函数名称以供进一步使用.其中有
因此,MS球员决定更换strdup用_strdup.
我只是继续使用strdup.C委员会不太可能定义strdup除POSIX之外的东西.要么#define strdup _strdup警告,要么使警告静音.
顺便说一下,我希望你看到这也适用于你的函数string_list等名称.
Che*_*Alf 29
strdup不是标准的C++函数.但它显然是一个Posix函数,无论如何它是一个众所周知的函数,自K&R C.以来一直存在.所以如果你绝对必须使用它,不要担心任何可能的名称冲突,只需写入strdup以获得最大的可移植性.
如果您只是想避免警告消息:
Project-> property - > C/C++ - > Preprocessor - > Preprocessor Definitions
编辑它,然后添加
_CRT_NONSTDC_NO_DEPRECATE
strdup是POSIX:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html
_strdup是Windows特定的:
http://msdn.microsoft.com/en-us/library/y471khhc(v=vs.80).aspx
在Unix上,使用strdup.在Windows上,使用_strdup.就这么简单.如果您需要在Unix和Windows之间编写可移植代码:
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html
http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx
使用标准函数重新实现strdup:strlen,malloc和memmove.
使用跨平台实用程序库,如glib:
http://developer.gnome.org/glib/2.28/glib-String-Utility-Functions.html#g-strdup
请注意,Visual C++消息表明_strdup属于C++标准,但这是错误的,因为它可以在C++标准上进行验证.它仅使用下划线前缀作为函数的"命名空间".
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf
| 归档时间: |
|
| 查看次数: |
41904 次 |
| 最近记录: |