The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Проблема новичка , A6e3iana (ok), 14-Янв-22, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


5. "Проблема новичка "  +/
Сообщение от ACCA (ok), 17-Янв-22, 21:09 
Хороший пример, как НЕ НУЖНО писать программы. Сравни с этим:


#include <stdio.h>

int main(int argc, char* argv[]) {
    if (argc != 3) {
       puts("need 2 surnames\n");
       return 1;
    }
    int diff = strlen(argv[1]) - strlen(argv[2]);

    if (diff >0) {
       printf("%s longer than %s\n", argv[1], argv[2]);
       return 0;
    }
    if (diff <0) {
       printf("%s shorter than %s\n", argv[1], argv[2]);
       return 0;
    }

    printf("%s and %s are equal length\n", argv[1], argv[2]);
    return 0;
}

Ответить | Правка | Наверх | Cообщить модератору

6. "Проблема новичка "  +/
Сообщение от A6e3iana (ok), 18-Янв-22, 10:02 
> Хороший пример, как НЕ НУЖНО писать программы. Сравни с этим:

Приветствую! Спасибо за комментарий! Очень важен для меня ибо поднимает актуальные вопросы.

Первый: "Как выглядит промышленный код?" По задумке выношу реализацию в отдельные функции и в main оставляю только общую логику и организацию данных. На данном этапе на простых программах это избыточный код, но может быть такая привычка даст результаты в будущем?

Второй: "Как правильно учиться?" Где то прочел: пока не знаешь как устроенны и работают простые библиотечные функции не используй их, а пиши свои реализации". ПОДЧЕРКНУ: совет для стадии обучения. Мне он понравился вот и леплю как могу.

Из Примера подчеркнул:
Проверку входный данных - полезно, ЗАПОМНЮ!
Введение переменной хранящей разницу вместо постоянного сравнения и её имя "diff". ЗАПОМНЮ!
Это вообще мрак придумывать имена для переменных на англ да ещё как можно короче.

Что думаете о выше поставленных вопросах?


Ответить | Правка | Наверх | Cообщить модератору

9. "Проблема новичка "  +/
Сообщение от Конч (?), 18-Янв-22, 20:40 
>На данном этапе на простых программах это избыточный код, но может быть такая привычка даст результаты в будущем?

Изменения в конкретной функции затрагивают её поведение. Если ты кладёшь весь код в одну функцию и в ней много кода, при изменении может много что сломаться. Ну и лично у меня есть правило не класть в одну функцию кода больше, чем помещается на экране, правда вот, на си я обычно не пишу, на си бы я лимит строк мог бы и увеличить, возможно.
Просто если это читает другой человек, то для того, чтобы понять смысл функции, ему придётся мотать функцию туда-сюда. Если же она примерно умещается на экране (25-50 строк где-то - мой верхний лимит обычно), то и мотать не придётся.

>Где то прочел: пока не знаешь как устроенны и работают простые библиотечные функции не используй их, а пиши свои реализации

В принципе, совет хороший, вместе с алгоритмами учить, как делаются вот такие вот вещи. Жалко, что меня на такое не хватило, хотелось бы поизучать...
Но помимо этого стоит ещё читать чужой код. Я не читал и имею с этого последствия в понимании.

>Проверку входный данных - полезно, ЗАПОМНЮ!

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

Ответить | Правка | Наверх | Cообщить модератору

10. "Проблема новичка "  +/
Сообщение от Конч (?), 18-Янв-22, 20:41 
>затрагивают её поведение

Могут затрагивать.

Ответить | Правка | Наверх | Cообщить модератору

11. "Проблема новичка "  +/
Сообщение от ACCA (ok), 21-Янв-22, 23:55 
> Первый: "Как выглядит промышленный код?" По задумке выношу реализацию в отдельные функции

Промышленный код выглядит, как дерьмо, размазаное по потолку криворукими обезьянами.


> и в main оставляю только общую логику и организацию данных. На
> данном этапе на простых программах это избыточный код, но может быть
> такая привычка даст результаты в будущем?

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


> Второй: "Как правильно учиться?" Где то прочел: пока не знаешь как устроенны
> и работают простые библиотечные функции не используй их, а пиши свои
> реализации". ПОДЧЕРКНУ: совет для стадии обучения. Мне он понравился вот и
> леплю как могу.

Мы поняли.
Обрати внимание, что в моём примере использована только одна библиотечные функция (не считая печати) - strlen. И не написана ни одна новая.

Всё остальное сделано [за кадром] средствами операционной системы.


> Что думаете о выше поставленных вопросах?

Научишься. Попробуй найти книгу https://search.rsl.ru/ru/record/01001496775

И ещё - никогда не используй глобальные переменные.

Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

14. "Проблема новичка "  +/
Сообщение от Конч (?), 30-Янв-22, 16:51 
> И ещё - никогда не используй глобальные переменные.

А goto ему можно использовать?

Ответить | Правка | Наверх | Cообщить модератору

15. "Проблема новичка "  +/
Сообщение от ACCA (ok), 09-Апр-22, 11:19 
>> И ещё - никогда не используй глобальные переменные.
> А goto ему можно использовать?

Это не некропост, просто пришлось подумать.

Если не использовать heap, а всю память брать из stack, то exception реализуется очень просто - переставляешь stack и выполняешь goto.

Походу malloc - крайне вредная функция. Это же COMMON BLOCK из FORTRAN.

Ответить | Правка | Наверх | Cообщить модератору

7. "Проблема новичка "  +/
Сообщение от Конч (?), 18-Янв-22, 20:25 
А вот я терпеть не могу стиль с { на той же строке.
Но это ладно, тут звезда сразу после типа - может подбить новичка думать, что звезда - часть типа.
Да и по паре действий в каждом if внизу не особо нужны.

Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

8. "Проблема новичка "  +/
Сообщение от Конч (?), 18-Янв-22, 20:28 
Обычно учат вводить данные прямо с консольки, со stdin, в теории это должно чему-то научить, но по сути учит не умеющих в консольку людей ненавидеть консоль.
Ответить | Правка | К родителю #5 | Наверх | Cообщить модератору

12. "Проблема новичка "  +/
Сообщение от Аноним (12), 22-Янв-22, 17:27 
> Обычно учат вводить данные прямо с консольки, со stdin, в теории это
> должно чему-то научить,

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

Ответить | Правка | Наверх | Cообщить модератору

13. "Проблема новичка "  +/
Сообщение от Конч (?), 30-Янв-22, 16:50 
>> Обычно учат вводить данные прямо с консольки, со stdin, в теории это
>> должно чему-то научить,
> не чимунибуть, а работать с стдин. вы плять хеловордисты не умеете и
> элементарных консольных утилит написать, а уже передаете в поколение свою безмозглость.

Не каждой программе суждено быть фильтром.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру