diff options
author | Boris Verkhovskiy <boris.verk@gmail.com> | 2024-06-03 13:31:20 -0600 |
---|---|---|
committer | Boris Verkhovskiy <boris.verk@gmail.com> | 2024-06-03 13:31:20 -0600 |
commit | 790a78e3cf1ec8610699ed34255d459f84a92a18 (patch) | |
tree | a62702ae158c36167e3047f7be5d16197cff0859 /ru-ru | |
parent | 29bf4c1b9f353fa3321f663dc52c1b227a1ed9e5 (diff) |
Remove bare links
Diffstat (limited to 'ru-ru')
-rw-r--r-- | ru-ru/c-ru.html.markdown | 40 | ||||
-rw-r--r-- | ru-ru/perl-ru.html.markdown | 4 |
2 files changed, 21 insertions, 23 deletions
diff --git a/ru-ru/c-ru.html.markdown b/ru-ru/c-ru.html.markdown index f7b1477b..f376054d 100644 --- a/ru-ru/c-ru.html.markdown +++ b/ru-ru/c-ru.html.markdown @@ -60,7 +60,7 @@ int main() { // long как правило занимает от 4 до 8 байт // long long занимает как минимум 64 бита long x_long = 0; - long long x_long_long = 0; + long long x_long_long = 0; // float это 32-битное число с плавающей точкой float x_float = 0.0; @@ -124,7 +124,7 @@ int main() { // Если между одинарными кавычками есть символ – это символьный литерал, // но это тип int, а не char (по историческим причинам). - + int cha = 'a'; // хорошо char chb = 'a'; // тоже хорошо (подразумевается преобразование int в char) @@ -165,7 +165,7 @@ int main() { // Правильно: int between_0_and_2 = 0 < a && a < 2; - // Логика + // Логика !3; // => 0 (логическое НЕ) !0; // => 1 1 && 1; // => 1 (логическое И) @@ -206,8 +206,8 @@ int main() { } // => prints "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, " printf("\n"); - - //Цикл с постусловием + + // Цикл с постусловием int kk = 0; do { printf("%d, ", kk); @@ -239,12 +239,12 @@ int main() { exit(-1); break; } - + /////////////////////////////////////// // Форматирование вывода /////////////////////////////////////// - // Каждое выражение в Си имеет тип, но вы можете привести один тип к другому, + // Каждое выражение в Си имеет тип, но вы можете привести один тип к другому, // если хотите (с некоторыми искажениями). int x_hex = 0x01; // Вы можете назначать переменные с помощью шестнадцатеричного кода. @@ -259,7 +259,7 @@ int main() { // Для определения максимального значения типов `char`, `signed char` и `unisigned char`, // соответственно используйте CHAR_MAX, SCHAR_MAX и UCHAR_MAX макросы из <limits.h> - + // Целые типы могут быть приведены к вещественным и наоборот. printf("%f\n", (float)100); // %f formats a float printf("%lf\n", (double)100); // %lf formats a double @@ -304,8 +304,8 @@ int main() { // Объявление указателя на int с адресом массива. int* x_ptr = x_array; - // x_ptr сейчас указывает на первый элемент массива (со значением 20). - // Это работает, потому что при обращении к имени массива возвращается + // x_ptr сейчас указывает на первый элемент массива (со значением 20). + // Это работает, потому что при обращении к имени массива возвращается // указатель на первый элемент. // Например, когда массив передаётся в функцию или присваивается указателю, он // неявно преобразуется в указатель. @@ -326,7 +326,7 @@ int main() { printf("%d\n", x_array[1]); // => Напечатает 19 // Вы также можете динамически выделять несколько блоков памяти с помощью - // функции malloc из стандартной библиотеки, которая принимает один + // функции malloc из стандартной библиотеки, которая принимает один // аргумент типа size_t – количество байт необходимых для выделения. int *my_ptr = malloc(sizeof(*my_ptr) * 20); for (xx = 0; xx < 20; xx++) { @@ -335,16 +335,16 @@ int main() { // Работа с памятью с помощью указателей может давать неожиданные и // непредсказуемые результаты. - printf("%d\n", *(my_ptr + 21)); // => Напечатает кто-нибудь знает, что? + printf("%d\n", *(my_ptr + 21)); // => Напечатает кто-нибудь знает, что? // Скорей всего программа вылетит. - // Когда вы закончили работать с памятью, которую ранее выделили, вам необходимо + // Когда вы закончили работать с памятью, которую ранее выделили, вам необходимо // освободить её, иначе это может вызвать утечку памяти или ошибки. free(my_ptr); - // Строки это массивы символов, но обычно они представляются как + // Строки это массивы символов, но обычно они представляются как // указатели на символ (как указатели на первый элемент массива). - // Хорошей практикой считается использование `const char *' при объявлении + // Хорошей практикой считается использование `const char *' при объявлении // строчного литерала. При таком подходе литерал не может быть изменён. // (например "foo"[0] = 'a' вызовет ошибку!) @@ -460,7 +460,7 @@ void str_reverse_through_pointer(char *str_in) { void (*f)(char *); // Сигнатура должна полностью совпадать с целевой функцией. f = &str_reverse; // Присвоить фактический адрес (во время исполнения) // "f = str_reverse;" тоже будет работать. - //Имя функции (как и массива) возвращает указатель на начало. + // Имя функции (как и массива) возвращает указатель на начало. (*f)(str_in); // Просто вызываем функцию через указатель. // "f(str_in);" или вот так } @@ -468,10 +468,8 @@ void str_reverse_through_pointer(char *str_in) { ## На почитать -Лучше всего найдите копию [K&R, aka "The C Programming Language"](https://en.wikipedia.org/wiki/The_C_Programming_Language) -Это **книга** написанная создателями Си. Но будьте осторожны, она содержит идеи которые больше не считаются хорошими. - -Другой хороший ресурс: [Learn C the hard way](http://learncodethehardway.org/c/). +Лучше всего найдите копию [K&R, она же "The C Programming Language"](https://en.wikipedia.org/wiki/The_C_Programming_Language), +это книга написанная создателями Си. Но будьте осторожны, она содержит идеи которые больше не считаются хорошими. Если у вас появился вопрос, почитайте [compl.lang.c Frequently Asked Questions](http://c-faq.com). @@ -479,4 +477,4 @@ void str_reverse_through_pointer(char *str_in) { Читаемый код лучше, чем красивый или быстрый код. Чтобы научиться писать хороший код, почитайте [Linux kernel coding style](https://www.kernel.org/doc/Documentation/CodingStyle). -[1] http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member +[1] [http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member](http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct-equal-to-the-sum-of-sizeof-of-each-member) diff --git a/ru-ru/perl-ru.html.markdown b/ru-ru/perl-ru.html.markdown index a9bb683b..417cd801 100644 --- a/ru-ru/perl-ru.html.markdown +++ b/ru-ru/perl-ru.html.markdown @@ -128,7 +128,7 @@ open(my $in, "<", "input.txt") or die "Can't open input.txt: $!"; open(my $out, ">", "output.txt") or die "Can't open output.txt: $!"; open(my $log, ">>", "my.log") or die "Can't open my.log: $!"; -# Читать из файлового дескриптора можно с помощью оператора "<>". +# Читать из файлового дескриптора можно с помощью оператора "<>". # В скалярном контексте он читает одну строку из файла, в списковом -- # читает сразу весь файл, сохраняя по одной строке в элементе массива: @@ -154,7 +154,7 @@ logger("We have a logger subroutine!"); Perl-овые модули предоставляют широкий набор функциональности, так что вы можете не изобретать заново велосипеды, а просто скачать -нужный модуль с CPAN (http://www.cpan.org/). +нужный модуль с [CPAN](http://www.cpan.org/). Некоторое количество самых полезных модулей включено в стандартную поставку Perl. |