当我在MicrosoftVisualC++中使用strdup时,它会警告我:
警告C4996:‘str举’:这个项目的POSIX名称被废弃了。相反,使用符合C++的名称:_strdup。有关详细信息,请参阅联机帮助。
因此,_strdup似乎是正确的。
但是当我在GCC (Fedora )中使用_strdup时,编译器会显示一个错误:
错误:“_strdup”未在此范围内声明
使用GCC和Linux,编译器不会显示strdup的任何错误。
哪个是正确的- strdup还是_strdup?
注意:我在代码中包括了<string.h>。
发布于 2011-09-28 11:28:49
strdup不是一个标准的C++函数。但是它显然是一个Posix函数,不管怎么说,它是一个众所周知的函数,从K&R开始就已经存在了。所以,如果您绝对必须使用它,不要担心任何可能的名称冲突,只需编写strdup以获得最大的可移植性。
发布于 2011-09-28 11:46:23
哪个是对的?
strdup是一个完全正确的POSIX函数。尽管如此,它并不属于标准,ANSI C标准保留了一些(广泛的)函数名称以供进一步使用。其中,有
因此,MS人员决定用_strdup代替_strdup。
我只想继续使用strdup。C委员会不太可能将strdup定义为POSIX以外的其他内容。要么#define strdup _strdup,要么沉默警告。
顺便说一句,我希望您看到这也适用于您的函数,比如string_list等。
发布于 2014-06-25 23:34:12
您可以#定义不赞成来禁用此警告。
https://stackoverflow.com/questions/7582394
复制相似问题