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

В (ANSI) C99 можно использовать обозначенный инициализатор для инициализации структуры:

MY_TYPE a = { .flag = true, .value = 123, .stuff = 0.456 };

Редактирование: Другие участники инициализируются как нуль: "Опущенные члены поля неявно инициализируются то же как объекты, которые имеют статическую продолжительность хранения". ( https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html )

20
задан 14 July 2009 в 18:59
поделиться

14 ответов

You could check out a copy of glibc, which will have the source code for all C functions in the C standard library. That should be a good starting place.

27
ответ дан 29 November 2019 в 22:39
поделиться

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

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

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

Хороший код C редко бывает хорошим кодом C ++. strcpy и другие функции библиотеки C определенно не подходят для кода C ++.

17
ответ дан 29 November 2019 в 22:39
поделиться

Most compilers provide source code for the library - however that source code is usually rather more complex and convoluted than you might expect.

A good resource for this is P.J. Plauger's book, "The Standard C Library", which can be had pretty cheaply if you go for a used one. The code presented is not always straight-forward, but Plauger explains it quite well (and gives the reasons why it can't always be straight-forward and still follow the standard).

7
ответ дан 29 November 2019 в 22:39
поделиться

Look at an implementation of the libc standard C library. To see how a real, popular C library is implemented, try looking at the glibc code. You can access the code using git:

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

As for C++, you can find the glibc++ standard library on one of these mirrors:

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

You can also check out uLibc, which will probably be simpler than the GNU library:

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

To give you a flavour, here's the strncpy implementation from 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;
}

Here is strcmp and strstr

5
ответ дан 29 November 2019 в 22:39
поделиться

Many C standard library functions have source code listings & discussions in The C Programming Language by Kernighan & Ritchie. The discussions are a helpful way of learning more about the specifics of the C language & how functions in the standard library work under the hood.

6
ответ дан 29 November 2019 в 22:39
поделиться
2
ответ дан 29 November 2019 в 22:39
поделиться

Около 10 лет назад я прочитал Стандартную библиотеку Си Плагера . Настоятельно рекомендую.

2
ответ дан 29 November 2019 в 22:39
поделиться

«Стандартная библиотека C» - это спецификация. Вам нужны источники для реализации спецификации. Ваш компилятор C может предоставлять или не предоставлять такие источники - один из них - GCC .

2
ответ дан 29 November 2019 в 22:39
поделиться

Вы также можете посмотреть дерево исходных текстов OpenBSD . В частности, вы хотите подкаталог строк в libc .

2
ответ дан 29 November 2019 в 22:39
поделиться

Вот общие функции strXXX C в NetBSD: http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/string/

Вот реализация NetBSD strXXX для процессоров i386 http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/arch/i386/string/

0
ответ дан 29 November 2019 в 22:39
поделиться

Here you go

The implementation will vary somewhat from OS to OS, but the GNU/Linux implementation is probably going to be the easiest one to find out there.

1
ответ дан 29 November 2019 в 22:39
поделиться

If you use Visual Studio Professional or Team, you should be able to find the source here:

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

0
ответ дан 29 November 2019 в 22:39
поделиться

Для ваших целей может быть полезна эта книга : Освоение алгоритмов с помощью C

0
ответ дан 29 November 2019 в 22:39
поделиться

В целом, я считаю, что BSD libc намного легче читать, чем GNU. Меньше "gcc-измов", ядро ​​намного яснее по замыслу и т. Д. Например, код BSD для malloc вполне читаем по сравнению с glibc

0
ответ дан 29 November 2019 в 22:39
поделиться