[英]why is __STDC_WANT_LIB_EXT2__ needed in C?
在strdup 的 cpp 參考頁面上,我注意到它說,
作為 Dynamic Memory TR 中的所有函數,只有在實現定義了
__STDC_WANT_LIB_EXT2__
並且用戶在包含字符串之前將__STDC_ALLOC_LIB__
定義為 integer 常量 1 時,才能保證 strdup 可用。
我認為 function strdup
所做的只是malloc
一個空格並將源strcpy
到該空格,我還在 glibc 中找到了它的實現。
char * __strdup (const char *s)
{
size_t len = strlen (s) + 1;
void *new = malloc (len);
if (new == NULL)
return NULL;
return (char *) memcpy (new, s, len);
}
它的實現沒有什么特別之處,那么為什么我要在使用strdup
(或任何其他動態 Memory TR)之前將__STDC_WANT_LIB_EXT2__
定義為 integer 1 ? 在這里定義__STDC_WANT_LIB_EXT2__
做什么?
正如您鏈接的頁面頂部所闡明的那樣, strdup
function 直到 C23 才正式成為 C 標准庫的一部分,該標准庫尚未最終確定。
Before that, it was available as a " dynamic memory extension ", a set of extensions to the C standard introduced in 2010. Compilers and implementations of the C Standard Library (such as the GNU C Standard Library) which implemented these extensions usually "hid " 它們位於宏后面,例如本例中的STDC_WANT_LIB_EXT2
。 有關這些特殊功能宏的更多 Glibc 示例,請參閱功能測試宏。
特別是strdup
早在 2010 年之前就已經存在。作為 glibc 實現的 POSIX 標准的一部分,因此,如果您使用 GNU 工具鏈,則無需顯式定義上述宏。
有關 POSIX 函數的更多示例, 請參見此處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.