private_tm: Вообще не понятно зачем класс.
Применимость такого кода в реальном мире тоже вызывает сомнения. Узкая ниша парсинга больших объемов данных с гарантированной валидностью и известной длинной.
Pavel Ustyugov: Про фриланс не скажу, там по ощущениям больше на веб заточено или мобильные разработки.
Удаленка вполне реальна, но как показывает опыт, сначала несколько лет в офисе, а потом можно на удаленку расчитывать. Для прикладного программирования MFC вполне достаточно, у нас в конторе большинство основных проектов её используют.
Johanga: У нас указывается вилка зарплат, хотя временами действительно только "От". Но если написано от 80 а человек просит сразу 150 без испытательного срока... Значит это пока не для нас.
abcd0x00: Действительно был неправ. То что только указатель передается это понятно, но я почему-то считал, что так как компилятор имеет информацию о типе. И даже почему-то считал что получу предупреждение, а то ошибку если попытаюсь передать в функцию указатель на массив другого размера, что тоже оказалось неправильным :(
Хотя если передавать ссылку на массив тогда все мои рассуждения становятся верны, есть и контроль и размер
mlwrm: Нет вполне себе прикладное коммерческое ПО должно получиться. Почему-то много разработчиков у нас именно этот инструмент предпочитает. Типа проверенно временем, похоже старики и насоветовали молодому программеру. Или еще более вероятно, так как это плагин к нашему большому софту, ему дали пример, а он на основании него и сваял нечно.
Григорий Васильков: кроме удобства разработки и чтения, важно удобство поддержки. А приведенном примере можно вынести запрос файлов из трех источников в отдельную функцию, например.
Иногда практикуем проверку не вида if else if else, а if if if, тогда будут выполнены лишние проверки но код будет не столь вложенным.
Григорий Васильков: Именно так. На практике такое не так часто бывает, чтобы пришлось вызвать подряд десяток функций, и чтобы продолжать можно было только если все предыдущие выполнены успешно.
И, на самом деле, абсолютных догм нет, если оправдано можно и много return'ов напихать. Тогда лучше вынести этот блок в отдельную функцию, и всё это тщательно описать в комментариях.
PS: И к тому же часто бывает, что нельзя просто взять и прервать выполнение последовательности вызовов, надо либо явно закрывать, освобождать и т.д. что-то, либо оборачивать какой-либо автоматизацией.
Григорий Васильков: Не надоедает, чего не хватает, так это возможности добавить что-то свое на новом уровне. Хотя в некоторых случаях подобное и реализуется, но в основном это не удобно.
И кстати, так if (error) return error(); не делаю и другим по рукам бью, почти всегда должен быть один return на функцию.
Обычно это как-то так:
err_code = SUCCESS;
...
err_code = foo1();
if (!err_code) {
...
err_code = foo2();
if (!err_code) {
...
}
}
return err_code;
Истина это любое отличное от нуля значение.
Притом в реальной практике это так и есть, даже в одном компиляторе, но при использовании разных библиотек. А если совсем огород, то еще хуже может быть
progforgood:
Последующий символ вообще не причём. Используется где угодно, там где нужно увеличить некий счетчик. Чаще всего в циклах.
Смысл унарного оператора в том, что он потенциально быстрее работает. Но это было справедливо 20 с лишним лет назад, теперь можно положиться на компилятор, который сам сгенерирует оптимальный код.
Грубо говоря, операция i=i+1; где-то может превращаться в такой код:
взять переменную i положить её в регистр, взять константу 1 положить её в другой регистр, выполнить операцию суммирования, положить результат в память из результирующего регистра. Инструкция i++ позволяла сгенерировать чуть более простой код.
Тоже самое касается вариаций ++i и i++, ++i потенциально работает быстрее. Но это, опять же, очень маловероятно в современных реалиях, кроме случаев когда i это какой-то сложный объект.
Без ++ не обойтись при написании "красивого кода" типа классики while(*a++=*b++); // копирование строки
Но лучше подобное делать, когда наберешься опыта, А пока ограничиться циклами for где принято использовать именно унарный оператор инкремента.
progforgood: смотря что требуется сделать. i++ эквивалентно по смыслу i=i+1
Когда требуется именно это используйте ++.
А если где-то нужно значение i+1 так и пишите.
В параметрах функции ++ лучше вообще не использовать. Функция может оказаться макросом , как всем известный min например
Егор Марчук: что такое просто функция?
Например fprintf это просто функция?
Она возвращает число записанных элементов. Кто мешает написать такой код:
count = fprintf(...) + fprintf(...) + fprintf(...)
/// ура у нас в count общее число записанных в файл элементов. Только в каком порядке мы записали строки в файл никто не знает....
Анатолий Иванов: А что должна была сделать функция, я так понял из первого семпла вернуть индекс минимального элемента?
Новый вариант возвращает значение минимального элемента, и переменная key никак не используется.
Правильный вариант уже был дан выше: надо key проинициализировать 0. Логически это будет выглядеть так "принимаем нулевой елемент как минимальный, и номер минимального элемента присваиваем 0". Потом в цикле, и кстати от 1-го, а не от 0, сравниваем с каждым оставшимся элементом массива.