В (ANSI) C99 можно использовать обозначенный инициализатор для инициализации структуры:
MY_TYPE a = { .flag = true, .value = 123, .stuff = 0.456 };
Редактирование: Другие участники инициализируются как нуль: "Опущенные члены поля неявно инициализируются то же как объекты, которые имеют статическую продолжительность хранения". ( https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html )
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.
Стоит отметить, что исходный код стандартной библиотеки C не обязательно подчеркивает хорошие методы кодирования. Как стандартная библиотека, она имеет особый статус, когда, например, она может полагаться на множество неопределенных или непереносимых функций просто потому, что они знают точный компилятор, с которым она используется.
И, конечно же, только это расскажет вам о методах программирования на C.
Это не имеет ничего общего с практиками программирования на C ++, которые сильно отличаются. Не относитесь к ним как к одному языку. Не существует такого понятия, как C / C ++. C - это язык со своими собственными методами кодирования и общими идиомами, а C ++ - это отдельный, независимый язык, который также имеет свои собственные методы и идиомы.
Хороший код C редко бывает хорошим кодом C ++. strcpy
и другие функции библиотеки C определенно не подходят для кода C ++.
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).
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;
}
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.
Около 10 лет назад я прочитал Стандартную библиотеку Си Плагера . Настоятельно рекомендую.
«Стандартная библиотека C» - это спецификация. Вам нужны источники для реализации спецификации. Ваш компилятор C может предоставлять или не предоставлять такие источники - один из них - GCC .
Вы также можете посмотреть дерево исходных текстов OpenBSD . В частности, вы хотите подкаталог строк в libc .
Вот общие функции 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/
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.
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
Для ваших целей может быть полезна эта книга : Освоение алгоритмов с помощью C
В целом, я считаю, что BSD libc намного легче читать, чем GNU. Меньше "gcc-измов", ядро намного яснее по замыслу и т. Д. Например, код BSD для malloc вполне читаем по сравнению с glibc