dimka, сразу - в чём ты видишь агрессию? В том, что я "потребовал" от тебя того, что ты "потребовал" от меня? В таком случае ты начал с "агрессии".
Лично у меня нет никакого желания ни ссориться ни ругаться. ИМХО обсуждаем нормальный вопрос (который правда удалился от темы, если вообще имеет хоть какое-то отношение к ней - тут я с тобой полоностью согласен, поэтому я сначала обращусь непосредственно к теме, а потом продолжим насчёт PCH). Я совершенно серьёзно отношусь к твоему требованию доказательств, без ехидства и тд. Особенно потому, что мы находимся именно в теме для начинающих. И я не хочу (думаю и ты тоже), чтобы у начинающих сложился комплекс в отношении PCH, только потому, что dimka назвал это безобразием, или наоборот, что кто-то начнёт бездумно использовать PCH, только потому, что Джон и LogRus его тоже используют.
Если ты с этим согласен, то продолжим разговор. Единственное, к чему я призываю - быть корректным в высказываниях. И не просто хочу "докопаться", а действительно хочу понять какая связь между сообщением faudel, stdafx.h и PCH? И потом, почему ты думаешь, что доп. информация повредит мне, или LogRus?
Ещё раз:
Причём здесь stdafx.h и PCH? Вместо stdafx.h может быть какой угодно файл.
При том, что он VS создаётся по умолчанию
.
С чего ты взял? Я уже говорил, что только в определённых типах проектов. Откуда ты знаешь, что faudel использует именно stdafx.h? Самый простой проект можно сделать так: New -> Project->Win32->Win32 Console Project)->В визарде Application settings->Additional options: Empty project, добавляем в него пустой cpp-файл, пишем код
#include<iostream>
int main()
{
std::cout<<"Hello world\n";
return 0;
}
И всё великолепно работает.
Без всяких stdafx.h и PCH. Да даже не в этом дело.
Мы же в разделе для начинающих находимся. Вряд ли начинающий, получив ошибку компилятора и пожаловавшись о ней на форум, предварительно что-то перенастраивал со знанием дела.
1.
Какую именно ошибку он получил мы не знаем:
была выявлена ошибка в написании
Может просто кириллица редактором не поддерживается? Может что ещё? Тут мы можем фантазировать и придумывать решнеия пока врач не придёт.
2.
И потом, он получил её не в VS, а в DevC++. Как раз в VS всё работает (причём как с так и без stdafx.h и .cpp). Про кириллицу в консоле не так давно, с примерами я уже разбирал с кем-то (сорри, не помню с кем), так что ему надо просто поискать на форуме. Так что
Ты вот тоже только голословно заявил, что это "безобразие". Не так ли? "Чёткая межмодульная связность" - без конкретного примера, когда именно этой связности помешал PCH, не более чем набор умных слов. Да и высказывание в стиле "не думаю" тоже не тянет на полновесный аргумент.
Высказывание с примечанием "по-моему" означает, что у меня есть некое мнение, которое я никому не навязываю, но тем не менее имею на него право, и что обсуждение этого мнения будет offtop'ом для данной темы.
Хм... можно подумать, что кто-то высказывает и отстаивает чужие мнения. Я тоже высказываю только своё мнение, причём не настаиваю, что оно является единственной и не повторимой истинной. Но даже собственное мнение не берётся с потолка, и не меняется по настроению. Оно должно на чём-то основываться, как правило на личном опыте. Поэтому, ты совершенно справедливо сформулировал вопросы, на которые я считаю, необходимо дать ответы. И это правильно! Если бы мы просто беседовали тут только втроём - LogRus, ты и я, тобой вдвоём, то это скорее бы всего не имело бы смысла. Но эти сообщения будут читать начинающие. И для них аргументация мнения просто необходима. Иначе всё останется на уровне "Джон сказал", "LogRus упомянул", "dimka отверг" и тд.
Выходит, и слова про "15 минут" - пустые, без конкретного примера. Разница только в том, что я поверил в "15 минут экономии", а ты не поверил в нарушение чёткой межмодульной связности.
Ну почему же пустые? Ведь я тебе привёл реальные цифры. Если этого недостаточно, то вот:
с PCH:
------ Rebuild All started: Project: CCDMDemo, Configuration: Debug Win32 ------
Deleting intermediate files and output files for project 'CCDMDemo', configuration 'Debug|Win32'.
Compiling...
stdafx.cpp
Compiling...
WNDialog.cpp
WNComboBox.cpp
MenuButtonList.cpp
MenuButton.cpp
MainFrm.cpp
ImgItem.cpp
DlgSelectLanguage.cpp
DlgQuit.cpp
DlgMessage.cpp
DebugLogger.cpp
ChildView.cpp
CCDMResultCheque.cpp
CCDMResultCash.cpp
CCDMDemo.cpp
CCDMChequeDlg.cpp
CCDMCashDlg.cpp
AppLanguageDescr.cpp
AppConfig.cpp
Generating Code...
Compiling resources...
Linking...
LINK : LNK6004: ..\bin/CCDMDemo.exe not found or not built by the last incremental link; performing full link
Build Time 0:13Build log was saved at "file://d:\Projects\CCDMDemo\CCDMDemo\Debug\BuildLog.htm"
CCDMDemo - 0 error(s), 0 warning(s)
---------------------- Done ----------------------
Rebuild All: 1 succeeded, 0 failed, 0 skipped
без PCH:
------ Rebuild All started: Project: CCDMDemo, Configuration: Debug Win32 ------
Deleting intermediate files and output files for project 'CCDMDemo', configuration 'Debug|Win32'.
Compiling...
stdafx.cpp
Compiling...
WNDialog.cpp
WNComboBox.cpp
MenuButtonList.cpp
MenuButton.cpp
MainFrm.cpp
ImgItem.cpp
DlgSelectLanguage.cpp
DlgQuit.cpp
DlgMessage.cpp
DebugLogger.cpp
ChildView.cpp
CCDMResultCheque.cpp
CCDMResultCash.cpp
CCDMDemo.cpp
CCDMChequeDlg.cpp
CCDMCashDlg.cpp
AppLanguageDescr.cpp
AppConfig.cpp
Generating Code...
Compiling resources...
Linking...
LINK : LNK6004: ..\bin/CCDMDemo.exe not found or not built by the last incremental link; performing full link
Build Time 0:45Build log was saved at "file://d:\Projects\CCDMDemo\CCDMDemo\Debug\BuildLog.htm"
CCDMDemo - 0 error(s), 0 warning(s)
---------------------- Done ----------------------
Rebuild All: 1 succeeded, 0 failed, 0 skipped
Мне одно непонятно, как в такой агрессивной атмосфере обсуждения можно спокойно обмениваться мнениями. Если другое мнение априори считается за ересь, практика показывает, спор будет бесконечным. Предлагаю сбавить обороты и вырезать вопрос в отдельную тему, перенеся её в форум "С/С++".
Стоп, где это говорилось, что "другое мнение - ересь"? Где я сказал, что ты не прав, или намекнул на это? Что тебя так обидело-то?
А теперь по пунктам.
На все пункты я отвечу коротко, не вдаваясь в подробности каждого пункта. Речь не идёт о том, что надо было бы сделать всё по уму, тогда бы и проблем не возникало бы. Проект бездарен, но он существует, и с ним надо работать. Вся проблема заключается в том, что всё про что ты говоришь - это всё теория, которая поверь (тут тебе действительно лучше поверить мне на слово, иначе мне придётся описывать практически каждый день работы над проектом, в качестве доказательства) ооочень далека от практики.
Дорогие мои теоретики, любимые до слёз, нет и не бывает идеальных заказов, как не бывает идеальных клиентов, которые бы чётко и ясно объяснили, что именно они хотят, а потом бы сидели тихо как мышки до релиза. И как правило ошибки, типа той, про которую я упомянул, следствия не именно несуразных требований клиентов. Всё-таки надо открыть темку и рассказывать про реальную жизнь программистов, которая ох как далека от малины. Понимаешь, все эти диаграммки, структурки, модульки - хороши на бумаге на начальной стадии проекта.
Но вот проходит полгода, выпущена первая бета, клиент вонзает в неё свои зубы и... Блииин, а вот это не так, а это не эдак. А вот тут мне нужна кнопка, которая ... Но вот ведь твои требования, твоя подпись. Ну это всё понятно, но мы не можем с ЭТОЙ прогой работать. Надо менять. А как менять? Всё? И начинать с нуля? Да что ты, что ты! Вот тут чуть-чуть поменяем, вот тут исправим. В итоге запланированные фичи выкидываются из плана, их бюджет идёт на переделку существующих фич. Идёт НОРМАЛЬНАЯ подгонка проги под клиента. И это просто праздник когда удаётся исправить фичу полностью, а не делать workaround. Есть такое эмпирическое правило, на первые 90% проекта, у тебя уходит 10% времени. Остальные 90% времени уходят на оставшиеся 10%. И это правило не так уж далеко от истины.
Теперь добавь сюда, что проект делается 2-4 программерами. Каждый отвечает за свою часть и, несмотря на методы ЕП и все ТЕОРЕТИЧЕСКИЕ желания каждого, всё-равно каждый отвечает и хорошо разбирается ТОЛЬКО в "своей" части проги. Но потом начинается аврал.
Колега в отпуске, а мне надо за пару часов исправить ошибку в "его" части. С ошибками ещё куда не шло. А вот когда тебя просят срочно (в 9 пришёл на работу, в 11 должно быть готово) расширить например парсер чужих форматов "да это как вон тот формат, только чуть-чуть по другому". Вот тут-то всё и начинается. И слёзные уверения, что любая ф-я которую я программирую должна начинаться с теста, и тыканья в ISO-сертификат, согласно которому мы не имеем права ничего сдавать не протестировав, ничего не приносят. Есть такое слово НАДО. Ессно клиент берёт всю ответственность на себя, "кто её платит, тот её и танцует" и версия выходит.
Единственное, что я до сих пор никак не могу понять, как нашим менеджерам удаётся сохранять лицо фирмы да ещё и получать благодарности за отличную прогу. Всё-таки, наверное, ценности заключаются совсем в другом.
Надо пересматривать менталитет. Ладно, отклонился. Продолжаю, когда пробуешь вякнуть, что подобные вещи надо бы позже передалать, тебе сочувственно поддакивают, дескать надо, дык бюджета на это не выделено. Так что оставь как есть, если кому-то не понравится - пусть платят - переделаем. Когда через полгода, или как ты видел через год, ксати совсем забыл, ща на работе, вот данные компиляций, я немного загнул с числом компиляций:
2.1.21.5007 14:40
2.1.22.5020 14:51
Те тестер получил сначала версию 2.1.21, а через 11 минут 2.1.22 за это время программер компильнул её 13 раз.
Кстати очень типично для релизной горячки, когда приходится исправлять недочёты, мелочи "на лету".
Продолжаю. Так вот через год, если найдут ошибку. Уже конечно никто не помнит, почему так произошло и кто виноват. Тут и приходять на помощь средства "персональной" документации. Потычешь бумажками в носы всех этих деятелей и опять они сидят, да думают, какую бы ещё фичу выкинуть или проще сделать, чтобы эту дыру заткнуть. Вот так-то. А все красивые картиночки UML да чёртёжики, напоминают только о первых месяцах проекта, когда всё было так хорошо и жизнь казалась прекрасной. И ещё одно должен сказать за те почти восемь лет, что я в профессиональном программерском бизнесе НИ РАЗУ не было иначе.
Насчёт перекомпиляций. Да, в идеальном случае не требуется перекомпилировать ВЕСЬ проект каждый раз. Тут ты абсолютно прав. Да и не делаем мы этого. Но, есть два маленьких "но".
1. Я говорил об оценочном времени, которое будет затрачено даже на обычную компиляцию без PCH.
2. Я не знаю, как у других, но у нас используется студия VS от микрософт. И в 6ой версии и в .NET 2003 есть такая особенность. В больших проектах она не всегда компилирует всё, что надо. Изменяешь .срр, она показывает, что компилит именно этот срр. НО в дебагере, либо точки останова игнорируются, либо новый код просто перепрыгивается. И средство (установлено эмпирическим путём) только одно - полная перекомпиляция.
Такое происходит, как правило если сразу большие участки кода будут изменены. Тут сразу, как закон, получл последнюю версию - перекомпилируй всё. Тут уж ничего не поделаешь.
зы Сорри за сумбурность, писал урывками. Тему разобью и перенесу вечером.