簡體   English   中英

為什么在 C 中需要 __STDC_WANT_LIB_EXT2__?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM