Здравствуйте, AeroSun, Вы писали:
AS>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>Хедер — это некая внутренняя компиляторная сущность неизвестной природы, обозначаемая своим идентификатором. Использование идентификатора этой сущности в `#include <...>` приводит к замене данной директивы на содержимое хедера.
AS>Да нет же.
Я уже закрыл эту тему выше.
AS>Всё там известно и ясно любому
"Всё там известно и ясно любому" [x]
Мои ответы предназначены не для "любых", а для тех, кто хочет разбираться в тонкостях С и С++ ультравысоком уровне.
AS>кто хоть немного программировал на С++.
Это весьма характерный менталитет для "хоть немного программировавших на С++". Прямо по Дэннингу-Крюгеру. Надеюсь, что когда они побольше "попрограммируют на С++", понимания прибавится, убежденности поуменьшится.
Здравствуйте, AeroSun, Вы писали:
AS>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>За использование голого `#pragma once` — без страховки через include guards — "библиотека с гитхаба" сразу идет ффтопку под взрывы гомерического смеха окружающих. Никому такая библиотека не нужна.
AS> AS>`#pragma once` — это сейчас стандарт де-факто, include guards уже на полпути на свалку истории (вычищаются понемногу из легаси, ибо удобнее и есть уникумы которые умудряются разводить срач о code style как их "правильно" именовать :facepalm. AS>Де-факто с++ поддерживает это (вся тройка компиляторов уже хрен знает сколько времени, а кто пользуется допотопными — это их личный выбор и личные проблемы, которые остальных не касаются)
Смех да и только. Никто и нигде не пользуется `#pragma once`, кроме зеленых пионэров, которые изначально скопипастили ее из методичики какого-то своего ПТУ. Но и они быстро избавляются от этой привычки. "Де факто"...
АТ>>Многие из них, возможно, даже в курсе, что `#pragma once` ничего не дает (по сравнению с include guards), но продолжают механически следовать карго-культу.
AS>Прагма даёт лаконичность, отсутствие необходимости думать как гварды называть + отсутствие срачей о их "правильном" именовании. Взамен этого гварды как раз ничего не дают — они и есть самый явный карго-культ
Еще раз: даже те, кто продолжает карго-культово копипастить `#pragma once` из файла в файл, делают это всегда в совокупности с include guards. Голая `#pragma once` — это сразу штамп "пионэрский овнокот" поверх репозитория. Рассказывать же участникам форума про обилие "пионэрскиого овнокота" на гитхабе не обязательно — все об этом и так знают.
Здравствуйте, VladFein, Вы писали:
VF>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>... Голая `#pragma once` — это сразу штамп "пионэрский овнокот" поверх репозитория.
VF>А нету ли у Вас еще таких правил для штампов? Вроде TAB vs spaces? Curly brace placement?
Ой, да их тыщи! (спасибо за ваш хороший вопрос)
Но я не записываю, поэтому приведу лишь те карго-культы, что сразу приходят в голову, ибо встречаются с удивительным постоянством и выраженной сезонностью (читай: каждый год очередному набору "пионэров" раздают все те же методички):
1. Царь всех карго-культов: явное приведение типа на результат `malloc` в С коде
2. Указательная арифметика вместо <stdarg.h> (львовский политех, согласно расследованию ruSO)
3. Золотой фонд индийского программирования: формат `%[]s` в scanf
4. `int i = 0; for (i; i < 10; ++i)`
5. Когда нужно увеличить размер динамического массива, копирование данных из старого массива в новый почему-то делается через третий, специально выделенный временный массив.
6. Чтение файла `while (!f.eof()) { ... }` — "нас так учили"
7. ...
Здравствуйте, Shtole, Вы писали:
S>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>карго-культы
S>Какой смысл вкладывается в словосочетание?
Традиционный. Слепое следование/копирование некоей последовательности действий, без понимания ее семантики. Одним из наиболее распространённых вариантов карго-культа в программировании является выполнение ненужных (читай: ритуальных) действий в совокупности с нужными, сопровождаемое религиозными по своей сути опасениями вида "я не знаю, зачем я это делаю, но я всегда так делал ("нас так учили", "все так делают" и т.п.) и боюсь, что без этого все сломается".
Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>>карго-культы
S>>Какой смысл вкладывается в словосочетание?
АТ>Традиционный. Слепое следование/копирование некоей последовательности действий, без понимания ее семантики. Одним из наиболее распространённых вариантов карго-культа в программировании является выполнение ненужных (читай: ритуальных) действий в совокупности с нужными, сопровождаемое религиозными по своей сути опасениями вида "я не знаю, зачем я это делаю, но я всегда так делал ("нас так учили", "все так делают" и т.п.) и боюсь, что без этого все сломается".
Традиционный смысл немного другой: вы построили самолёт из земли, а он не полетел. А вот если он вдруг взял и полетел, то это уже не карго-культ, а рабочая авиационная система, даже если вам не нравится эффективность/эстетика/что-то ещё.
Здравствуйте, Shtole, Вы писали:
S>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>>>карго-культы
S>>>Какой смысл вкладывается в словосочетание?
АТ>>Традиционный. Слепое следование/копирование некоей последовательности действий, без понимания ее семантики. Одним из наиболее распространённых вариантов карго-культа в программировании является выполнение ненужных (читай: ритуальных) действий в совокупности с нужными, сопровождаемое религиозными по своей сути опасениями вида "я не знаю, зачем я это делаю, но я всегда так делал ("нас так учили", "все так делают" и т.п.) и боюсь, что без этого все сломается".
S>Традиционный смысл немного другой: вы построили самолёт из земли, а он не полетел. А вот если он вдруг взял и полетел, то это уже не карго-культ, а рабочая авиационная система, даже если вам не нравится эффективность/эстетика/что-то ещё.
Это какой-то уж очень узкоспециализированный смысл.
Карго-культ — бесполезное и бессмысленное копирование/подражание во всех их проявлениях.
Полетел или не полетел самолет — никакого значения не имеет. А вот обязательное закидывание резиновой галоши в нишу левого шасси (потому что у оригинала в левой нише тоже валялась кем-то забытая галоша) — это уже карго-культ.