Почему libc содержит синонимы? - PullRequest
1 голос
/ 12 июля 2011

синонимы формы _name существуют для записей имени, которые не перечислены с начальным подчеркиванием, добавленным перед их именем.Таким образом, libc содержит как getopt, так и _getopt, например.

Figure 3-2: libc Contents, Names with Synonyms

  __assert     getdate      lockf **     sleep        tell ** 
  cfgetispeed  getopt       lsearch      strdup       tempnam
  cfgetospeed  getpass      memccpy      swab         tfind
  cfsetispeed  getsubopt    mkfifo       tcdrain      toascii
  cfsetospeed  getw         mktemp       tcflow       _tolower
  ctermid      hcreate      monitor      tcflush      tsearch
  cuserid      hdestroy     nftw         tcgetattr    _toupper
  dup2         hsearch      nl_langinfo  tcgetpgrp    twalk
  fdopen       isascii      pclose       tcgetsid     tzset
  __filbuf     isatty       popen        tcsendbreak  _xftw
  fileno       isnan        putenv       tcsetattr    
  __flsbuf     isnand **    putw         tcsetpgrp    
  fmtmsg **    lfind        setlabel     tdelete    

Почему libc содержит синонимы?

UPDATE

Как использоватьсинонимы?Я попытался заменить getopt на _getopt, но только чтобы получить undefined reference to _getopt'`

Ответы [ 3 ]

0 голосов
/ 12 июля 2011

Или (возможно, следуя ответу @ rubenvb, который я считаю правильным), чтобы поддерживать совместимость на уровне исходного кода с некоторыми функциями библиотеки Win32, которые названы так._toupper является одним из них.

0 голосов
/ 01 марта 2012

Цитата из "БИНАРНЫЙ ИНТЕРФЕЙС ПРИЛОЖЕНИЯ SYSTEM V",

библиотека C включает синонимы для некоторых своих сервисов. Эти другие символы доступны для соответствия языковым и системным стандартам. В качестве примера, System V определяет read в качестве имени средства операционной системы. С другой стороны, ANSI C не определяет read и запрещает строго соответствующей реализации узурпировать имена приложений без начального подчеркивания (_). Таким образом, если синоним для read был недоступен, система не могла бы поддерживать строго соответствующую реализацию языка ANSI C.

ПРИМЕЧАНИЕ. Хотя синонимы не требуются для следующих интерфейсов, им разрешено существовать.

Короче говоря, синонимы соответствуют рекомендациям ANSI C. Если вы используете Linux, некоторые функции с синонимами в документе формата ELF, по-видимому, не имеют синонимов в glibc, поэтому вы можете проверить наличие символа с помощью readelf -s /usr/lib/libc.a.

0 голосов
/ 12 июля 2011

Вероятно, потому что они изначально были нестандартными, а затем добавлены в POSIX, удалили префиксы, но требовали обратной совместимости и были сохранены, поэтому естественно нужны были синонимы.

...