233

Советы падаванам C++ ( Часть 2 )

Серия Курсы создания компьютерных игр на C++

///////////////////////////////////////////////////

// Начальный курс создания компьютерных игр на C/C++

[0][1][2][2.5][3][4][5][5.5][6][6.2][7][7.2][8][9][9.2][10]

///////////////////////////////////////////////////

// Советы падаванам C++

[1]



Всем привет! :]


После первого поста количество подписчиков резко увеличилось в два раза, поэтому я решил не тянуть со вторым постом. :]

Сегодня в рубрике "Советы падаванам C++" у нас будут советы-привычки - те вещи, к которым нужно привыкнуть как можно раньше и использовать каждый день :]

Жду ваши отзывы в комментариях :]


И вот вам в тему пару весёлых картинок напоследок:

Лига программистов C/C++

69 постов4.8K подписчиков

Правила сообщества

Соблюдайте правила Pikabu:

https://pikabu.ru/html.php?id=wtf


Помимо этого ЗАПРЕЩЕНО:

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

Вы смотрите срез комментариев. Показать все
18
Автор поста оценил этот комментарий

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

это из оперы, когда закрывающую фигурную скобку не вынося на новую строку

раскрыть ветку (40)
3
Автор поста оценил этот комментарий

аналогично, как же раздражает код, где открывающая фигурная скобка не вынесена на новую строку...
на чем пишете коллега? полагаю на си шарп

раскрыть ветку (4)
3
Необходимое зло
Автор поста оценил этот комментарий

И пробелы перед всем чем можно, вот пример ада:

if ( 23 == a )  {

a = a - 2  ; }

3
Автор поста оценил этот комментарий

А теперь представь, каково поддерживать проект на ASP MVC в сочетании с ReactJS. Когда у тебя код на C# пишется исключительно с переносом открывающей скобки на новую строку, а весь код на JS наоборот, оставляет скобку на той же строке по принятым code style.

1
Автор поста оценил этот комментарий
Дефолтные настройки решают?)
Автор поста оценил этот комментарий
как же раздражает код, где открывающая фигурная скобка не вынесена на новую строку...

А, собственно, зачем?

2
Автор поста оценил этот комментарий
Ну это довольно устаревший приём. Современный компилятор сразу выдаст ворнинг, если там "=" вместо "==". И добавить к этому Treat warnings as errors.
раскрыть ветку (8)
0
Автор поста оценил этот комментарий
Qt Creator не выдаёт
раскрыть ветку (7)
10
Автор поста оценил этот комментарий
Еще бы, он же не компилятор)
4
Автор поста оценил этот комментарий

Это среда а не компилятор)

И кстати там можно получить этот варнинг

раскрыть ветку (4)
1
Автор поста оценил этот комментарий
как?
раскрыть ветку (3)
2
Автор поста оценил этот комментарий
В файле проекта

QMAKE_CFLAGS_WARN_ON -= -W3

QMAKE_CFLAGS_WARN_ON += -W4

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Спасибо!
1
Автор поста оценил этот комментарий
Добавь нужные параметры в дефайны в проектный файл, или прямо в шаги профиля компиляции и создания проекта.

Например для gcc -v, далее для ассемблера as -V, для сборщика ld -Wl,-v

1
Автор поста оценил этот комментарий
QtCreator - среда, а не компилятор. Она выдает только то, что возвращает ей компилятор!
2
Автор поста оценил этот комментарий

Когнитивный диссонанс. Мы привыкли читать слева направо, и хоть в русском языке и свободный порядок слов, но мозг ожидает, что первым пойдёт "подлежащее" (то есть название переменной), а не "косвенное дополнение" (её значение), так легче воспринимать информацию.

К примеру: "Плотник ударил молотком", "Молотком ударил плотник". Второе предложение обычно воспринимается сложнее. А если ещё учесть, что мы делаем "перевод" с языка программирования, весьма формального, точного, но зачастую нелогичного для нас, на язык человеческий, весьма неформальный, свободный, но логичный, то мы, вдобавок, нарушаем эту самую логику.


ЗЫ всё выше ПМСМ, с точки зрения недолингвиста, переквалифицировавшивося в программера.

1
Автор поста оценил этот комментарий

Внутри функций не переносят по вполне прагматичной причине.

// if (true) { // ERROR

А если перенести, но не закомментировать скобку, то блок выполнится. Это касается if else for while конструкций, свищ этому не подвержен.

раскрыть ветку (15)
2
Автор поста оценил этот комментарий

не-не, я про другой случай, когда закрывающая скобка остается на строке с последним оператором, типа такого

while(true)

{

     .

     .

     .

     оператор;}    <- злоебучая скобка на той же строке

раскрыть ветку (6)
3
Автор поста оценил этот комментарий

Вообще программисту полагается быть гибким. Это всё называется coding conventions - соглашение о том, как писать код. В Qt, например, классы именуются с большой буквы, методы - с маленькой (QString::fromLocal8Bit). В wxWidgets - наоборот (wxString::FromAscii). Если вы откроете исходники стандартной библиотеки в MinGW, то увидите буйство подчёркиваний. Приватные поля и методы начинаются с подчёркивания, аргументы функций и локальные переменные - аж с двух. У нас староста увидел, сказал, что у них на работе за такой код руки отрывают - задолбаешься эти подчёркивания набирать.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Подпишусь под этой фразой "программисту полагается быть гибким". На разных работах и проектах могут быть разные coding style conventions. И умение быстро принять стиль команды, это признак профессионализма, и существенный плюс новичку на испытательном сроке. Холиварить про те или иные достоинства разных стилей может любой дурак, но это растрата средств компании (время=деньги).
2
Автор поста оценил этот комментарий

а как же так?)

while(true) {

.

.

.

оператор;

}

2
Автор поста оценил этот комментарий

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

Моя группа начинала кодить с турбо си, под дос, там были случаи и написания всей программы в одну строку)

Никаких редакторов кода и тд, только хардкор :)

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

-100 к читабельности

1
Автор поста оценил этот комментарий

Ох, щи!

0
Автор поста оценил этот комментарий
Так себе причина. Часто ли программист комментирует случайные строки?


Давным-давно, в одной далекой галактике, мониторы вмещали всего несколько десятков строк на экран и каждая была насчету. И такой способ позволял "экономить" пяток-другой строковых позиций на экране абсолютно без учета читаемости (пространства имен, шаблоны, циклы с итераторами, списки инициалиации, да и вообще C++ тогда еще не появился). Так и повелось.

раскрыть ветку (7)
Автор поста оценил этот комментарий

От @0xdeadf00d я бы такое выслушал. Но не от дохлого падения.

Если полезная практика выходит из древних перфокарт, это ещё не означает, что она ущербна. Если бы мы обсуждали пробелы\табы или 2\4 пробела, венгерскую нотацию или камелкейс\снейккейс, я бы вас выслушал и написал "да, вы, возможно, правы".

А так

Иллюстрация к комментарию
раскрыть ветку (6)
0
Автор поста оценил этот комментарий
Вас на личности понесло. Кстати, лично ваше мнение меня не интересует, это я пишу для тех, кто читать тред будет, чтобы городские легенды не множились.
раскрыть ветку (5)
Автор поста оценил этот комментарий

Тогда говорите всю долбаную правду, если умничаете про долбаные консольки. Тот самый 40x25 режим, который вы пытаетесь связывать с переносом скобки, он был до начала 80-х. Потом пошли 80x25, а в монохроме реально было иметь 112x28, главное иметь поддержку в среде.


Вот только в это время самыми популярными были Кобол, Ада, Фортран и прочие Бейсики, у которых не было фигурных блоков, но были begin end, не терпевшие обычно операторов сразу после себя. А Фортран, так тот вообще требовал n-дцать отступов перед кодом. И? Нет, конечно, это не отменяет того, что в Си экономили каждый символ, чему доказательством будет венгерская нотация. Но и не позволяет делать системы из разрозненных фактов, потому что исходные коды в те времена ещё и печатали на бумаге. Было дело, даже утекали к конкурентам случайно. И на бумаге места не экономили, так как правки в код вносить нужно было карандашом между строк. (Венгерская нотация, кстати, до сих пор используется в плюсах или жабе, где писать поля класса не с m_ считается моветоном.)


В конце концов, если бы вы были правы, программисты просто писали бы код в строчку без пробелов (и они-таки писали). Но экономить один перенос, тем более, в конце блока, тем более, без табуляции, тем более, сегодня, ну, извините. Нужно иметь очень изящный ум для обоснования такого поведения.

раскрыть ветку (4)
0
Автор поста оценил этот комментарий
112х28 - это разгуляево по-вашему?) И причем здесь венгерская нотация с префиксами?
Вы бросаетесь в крайность, K&R-стиль не мешает чтению, но здорово экономит пространство в коде, изобилующем циклами и ветвлениями. Конечно, сейчас это вкусовщина. Лично мне на 1366х768 дискомфортно иначе.
раскрыть ветку (3)
Автор поста оценил этот комментарий

Да нет, не бросаюсь. Это вы бросили фразу

Так себе причина.

А я реально поменял шаблон автоформатирования текста после реальной ошибки. Дальше привёл пример, когда целый язык имеет указания к использованию анахронизмов, обоснованных чисто прагматичными причинами. И это "вкусовщина", "бросание в крайности"?


Нихера подобного, кто-то просто пизданул не подумав, а потом собеседника ещё крайним хочет выставить.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Как можно не видеть, что комментируешь? Так ошибиться очень сложо)


А то, откуда этот стиль взялся и почему он именно таков - это известно всем, кто мало-мальски в теме.


Вы срываетесь на мат, личные претензии. Беседовать с вами решительно невозможно, потому отвечать здесь больше не буду. Развлекайтесь)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Как можно не видеть, что комментируешь?

Объясните.

1
Автор поста оценил этот комментарий

Это раздражает только до тех пор пока не проведешь целый день раскапывая баг из-за несоблюдения этого правила. После чего начнешь сам так писать.

раскрыть ветку (8)
6
Автор поста оценил этот комментарий
За 6 лет знакомства с плюсами никогда не было такого бага. Пороть читаемость ради столь редких случаев?

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

А вообще подобные проблемы должны решаться с помощью статического анализатора кода, а не сексом с синтаксисом языка и стайл-гайдом.
раскрыть ветку (7)
6
Автор поста оценил этот комментарий

Тоже не понимаю, почему все так боятся вместо == написать =. Все компиляторы, с которыми мне довелось общаться, в таких случаях выдавали предупреждение.

warning: suggest parentheses around assignment used as truth value [-Wparentheses]
2
Автор поста оценил этот комментарий
Ок, симптом ошибки от тестировщика "просто играю в игру как обычно, в случайный момент краш". Анализ стека вызовов показывает нулевой указатель в списке планировщика событий. Как он туда попал? Хрен знает где стоит "проверка" типа value = nullptr. Warning не заметили по причине использования third party кода в том же модуле сборки, который срёт при компиляции двумя тысячами warning'ов. Удачи в поисках.

Конечно это говорит о более системных проблемах, сторонние модули должны компилироваться в отдельные либы, свой код должен компилироваться с максимальной строгостью, указатели должны быть smart с проверками, debug-версия планировщика должна хранить инфу о подписавшихся объектах, много чего нам "должно" как земля колхозу. но на практике ПМ говорит "рефакторинг денег не приносит".
раскрыть ветку (5)
2
Автор поста оценил этот комментарий
на практике ПМ говорит "рефакторинг денег не приносит".
ССЗБ
2
Автор поста оценил этот комментарий
Рефакторинг не приносит деньги тем, кто быстро шабашит проект и умывает ручи. Тем же, кто занимается его поддержкой, а уж тем более заказчику, который на софте строит сириус-бизнес, рефакторинг экономит такие сотни нефти, что порой такой бизнес может и вовсе развалиться из-за низкого качества ПО и невозможности его улучшить проще пристрелить
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Всё верно, но это мы, технари, понимаем. Менеджмент к сожалению далеко не всегда.
1
Автор поста оценил этот комментарий
Ок, симптом ошибки от тестировщика "просто играю в игру как обычно, в случайный момент краш". Анализ стека вызовов показывает нулевой указатель в списке планировщика событий. Как он туда попал? Хрен знает где стоит "проверка" типа value = nullptr. Warning не заметили по причине использования third party кода в том же модуле сборки, который срёт при компиляции двумя тысячами warning'ов. Удачи в поисках.

Конечно это говорит о более системных проблемах, сторонние модули должны компилироваться в отдельные либы, свой код должен компилироваться с максимальной строгостью, указатели должны быть smart с проверками, debug-версия планировщика должна хранить инфу о подписавшихся объектах, много чего нам "должно" как земля колхозу. но на практике ПМ говорит "рефакторинг денег не приносит".

Поиск такой ошибки - неопределенное количество человекодней, профилактика - 0 человекосекунд, затруднение читабельности junior'ами N человекоминут в год.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Извините, редактирование с планшета сглючило, продублировав коммент.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества