Подтвердить что ты не робот

Исходный код функций c/С++

Я хотел посмотреть на реализацию различных функций C/С++ (например, strcpy, stcmp, strstr). Это поможет мне узнать хорошие методы кодирования в c/С++. Не могли бы вы сообщить мне, где я могу его найти?

Спасибо.

4b9b3361

Ответ 1

Вы можете проверить копию glibc, которая будет иметь исходный код для всех функций C в стандартной библиотеке C. Это должно быть хорошим стартовым местом.

Ответ 2

Стоит отметить, что исходный код для стандартной библиотеки C не обязательно выделяет хорошие методы кодирования. Как стандартная библиотека, он имеет особый статус, где, например, он может полагаться на множество неуказанных или не переносных действий просто потому, что они знают точный компилятор, с которым он используется.

И, конечно же, это только говорит о методах кодирования C.

Это не имеет ничего общего с практикой кодирования на С++, которая очень отличается. Не относитесь к ним как к одному языку. Нет такой вещи, как C/С++. C - это язык с его собственными методами кодирования и распространенными идиомами, а С++ - отдельный независимый язык, который также имеет свои собственные практики и идиомы.

Хороший код C редко является хорошим кодом на С++. strcpy и другие функции библиотеки C, безусловно, не являются хорошим кодом на С++.

Ответ 3

Многие стандартные функции библиотеки C имеют списки исходного кода и обсуждения в Язык программирования C от Kernighan и Ritchie. Обсуждения - это полезный способ узнать больше о специфике языка C и о том, как функции в стандартной библиотеке работают под капотом.

Ответ 4

Большинство компиляторов предоставляют исходный код для библиотеки - однако этот исходный код обычно более сложный и запутанный, чем вы могли ожидать.

Хорошим ресурсом для этого является P.J. Plauger book, "The Standard C Library" , которая может быть довольно дешевой, если вы идете на подержанную. Представленный код не всегда прямолинейный, но Plauger объясняет это довольно хорошо (и дает причины, по которым он не всегда может быть прямым и по-прежнему следовать стандарту).

Ответ 5

Посмотрите на реализацию стандартной библиотеки C libc. Чтобы увидеть, как реализуется реальная, популярная библиотека C, попробуйте взглянуть на код glibc. Вы можете получить доступ к коду с помощью git:

git clone git://sourceware.org/git/glibc.git

Что касается С++, вы можете найти стандартную библиотеку glibС++ на одном из этих зеркал:

http://gcc.gnu.org/mirrors.html

Вы также можете проверить uLibc, который, вероятно, будет проще, чем библиотека GNU:

http://git.uclibc.org/uClibc/tree/

Чтобы дать вам вкус, здесь strncpy реализация из uLibc:

Wchar *Wstrcpy(Wchar * __restrict s1, const Wchar * __restrict s2)
{
    register Wchar *s = s1;

#ifdef __BCC__
    do {
        *s = *s2++;
    } while (*s++ != 0);
#else
    while ( (*s++ = *s2++) != 0 );
#endif

    return s1;
}

Вот strcmp и strstr

Ответ 7

"Библиотека Standarc C" - это спецификация. Вам нужны источники для реализации спецификации. Ваш компилятор C может предоставить или не предоставить такие источники - тот, который делает это GCC.

Ответ 10

Здесь вы переходите

Реализация будет несколько отличаться от ОС к ОС, но реализация GNU/Linux, вероятно, будет самой простой, чтобы найти там.

Ответ 12

Если вы используете Visual Studio Professional или Team, вы можете найти источник здесь:

C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src

Ответ 14

В общем, я считаю, что BSD libc гораздо легче читать, чем GNU. Есть меньше "gcc-isms", ядро ​​намного яснее в намерениях и т.д. Например, код BSD для malloc вполне читаемый по сравнению с glibc