Как я могу проверить, правильно ли я реализую функции библиотеки C?
Есть ли источник / база данных для основных функций библиотеки C (например, strcmp
, memset
, так далее)?
Я хочу реализовать базовые функции библиотеки C, но не могу проверить, правильно ли я это делаю или нет.
Я нашел несколько баз данных исходного кода, но они намного сложнее, чем должны быть (например, реализация strcpy
более 30 строк, половина из которых не связана с копированием строк, я думаю).
3 ответа
Проверьте библиотеку C OpenBSD. Например, вот его основной strcpy
:
char *
strcpy(char *to, const char *from)
{
char *save = to;
for (; (*to = *from) != '\0'; ++from, ++to);
return(save);
}
Документация по функциям включена в виде справочных страниц.
(Он также содержит оптимизированные версии общих подпрограмм, как правило, на ассемблере, поэтому версии C действительно должны рассматриваться как эталонные реализации.)
Есть замечательная книга The Standard C Library от PJ Plauger. Это немного устаревший (1992), но все же ценный ресурс, если вы хотите реализовать libc и сделать это правильно. Содержит полный код библиотеки. Существует также musl libc. Код живет в git repo. Реализация не проста, но если я сравню ее с другими реализациями, она действительно мала и проста. И, как кто-то другой уже упомянул, стандарт C - это то, на что вы хотите взглянуть.
"Базовые" функции библиотеки C также являются одними из наиболее важных для производительности и правильности программы, и поэтому имеют тенденцию иметь некоторые сложные реализации.
Я предлагаю вам взглянуть на код для Newlib. Это базовая библиотека C, предназначенная для встраиваемых систем (ваш телевизор вполне может ее запустить), и она также используется в Cygwin. Лицензия также в основном совместима с "заимствованием" источника для ваших собственных целей, но будьте осторожны, потому что некоторые ее части (некоторые файлы) являются GPL.