Как я могу проверить, правильно ли я реализую функции библиотеки 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.

Другие вопросы по тегам