Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MS VC 6. Отладочных вставок достаточно много. Для уменьшения писанины типа #if defined(_DEBUG) ... #endif решил немного соптимизировать препроцессором. В начале кода есть такие строчки: Код: plaintext 1. 2. 3. 4. 5. 6. 7. т.е. закоментировать отладочные вызовы при сборке релиза. Далее в коде так: Код: plaintext 1. 2. В релизе первая строка исчезает, а вторая остается, т.е. 456 выводится. Можно это как-то победить? ЗЫ В принципе и первый вариант устраивает, но второй универсальнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 08:58 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima T, Закомментировать препроцессором ничего невозможно. Комментарии "удаляются" ещё до препроцессора. Вместо этого нужно определять макросы так, чтобы они регулировании пустой, ничего не делающий код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 09:45 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima T, #define DEBUG_printf // Эквивалентно #define DEBUG_printf Т.е. объявлению макроса как пустого. Так у тебя не получился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 09:48 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MasterZivDima T, #define DEBUG_printf // Эквивалентно #define DEBUG_printf Т.е. объявлению макроса как пустого. Так у тебя не получился. Точно. Не подумал что компилятор вместо Код: plaintext 1. смог откомпилировать Код: plaintext 1. странно что ни ошибок, ни глюков в работе. Т.е. получается #if defined(_DEBUG) ... #endif и никаких других вариантов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 12:27 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima T[/src] смог откомпилировать Код: plaintext 1. странно что ни ошибок, ни глюков в работе. Т.е. получается #if defined(_DEBUG) ... #endif и никаких других вариантов? Что странного ? Это Код: plaintext 1. вполне валидное выражение. Значение его -- iVar. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 12:30 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima T, Т.е. получается #if defined(_DEBUG) ... #endif и никаких других вариантов? В общем, да. Но ты можешь объявить макрос-функцию, и переопределять её либо в реальную функцию, либо в нично. Но в данном конкретном случае функция-макрос должна иметь переменное кол-во параметров. Это возможно только в современных С и С++, по последним стандартам. VC6 к этому не относится. Он уже очень старый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 12:32 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MasterZivвполне валидное выражение. Значение его -- iVar. Буду знать. Только так и не понял зачем такое писать надо бывает. Глубокими познаниями в Си не обладаю, значит это мне знать пока не требуется. MasterZivНо в данном конкретном случае функция-макрос должна иметь переменное кол-во параметров. Это возможно только в современных С и С++, по последним стандартам. VC6 к этому не относится. Он уже очень старый. Наверно пора задумываться о чем-нибудь посвежее. На Си немного пишу. В основном DLL-обертки для WinAPI, т.к. в фокспро есть проблемы при работе со структурами, а callback функции вообще невозможно сделать. Тут VC6 хватает, да и привык я к нему. VC6 нужен чтобы со старым рантаймом Сишным работал. Который во всех виндовсах есть. Что всегда нравилось в VC6 - делай Win32 проект, компилируй и запускай хоть на Win98 - работает и никаких доп. DLL поискать не просит. С более поздними MSVC в итоге получается моя DLL-ка 30-40 Кб и рантайм в нагрузку 1,5 Мб (msvcp100.dll msvcr100.dll) которого кстати почему-то нет даже в Win7. Хотя по сегодняшним меркам лишние 1,5 Мб можно и проигнорировать. Но боюсь что вдруг на каком-нибудь Win2000 (редко но еще бывает) еще чего-нибудь попросит. Еще линукс с вайном есть у некоторых. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 13:22 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima T, там где нет поддержки макросов с "..." можно сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Тогда строки Код: plaintext 1. 2. В release дают Код: plaintext 1. 2. А в debug Код: plaintext 1. 2. if (false) в большинстве компиляторов будет вычислено уже на этапе компиляции и соответствующий код вообще не попадет в программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 14:26 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Выше приведенный код с if (false) имеет недостаток - следующий код не будет работать как ожидается: Код: plaintext 1. 2. 3. 4. else тут будет относиться к if (false)внутри макроса и do_somethisng() будет вызываться в release всегда. Но к счастью отладочные сообщения обычно печатают без условий :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 14:29 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВыше приведенный код с if (false) имеет недостаток ... Спасибо за идею. Подходит. Немного подправлю: чтоб в релизе сюрпризы не получить лучше так написать Код: plaintext 1. 2. 3. 4. 5. 6. 7. тогда этот недостаток вскроется еще при дебаге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 15:38 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima TНаверно пора задумываться о чем-нибудь посвежее. vc Express вот только что 2013 вышел.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 16:17 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima T, Ой, лучше уж написать лишний #ifdef _DEBUG ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 16:20 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MasterZivDima T, Ой, лучше уж написать лишний #ifdef _DEBUG ... Еще какие-то подводные камни есть кроме съезжания else? С else я уже попадал как-то. Долго искал косяк в такой конструкции: Код: plaintext 1. 2. 3. 4. после того как нашел никогда так не пишу. даже если одна строчка кода - все-равно в {}. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 16:33 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MasterZivDima TНаверно пора задумываться о чем-нибудь посвежее. vc Express вот только что 2013 вышел.. так в Express только .NET вроде. Или Win32 проекты тоже можно делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 16:51 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima TС else я уже попадал как-то. Долго искал косяк в такой конструкции: Наверное поэтому используют в таких случаях не if, а while(0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 18:28 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima TMasterZivпропущено... vc Express вот только что 2013 вышел.. так в Express только .NET вроде. Или Win32 проекты тоже можно делать? На сколько я помно, C++, С#, F#, VB.net . К С++ не идёт ничего из дополнительных библиотек, кроме WinSDK. (MFC нет, ATL нет). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 18:30 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MasterZiv, А, ещё там лицензия типа "только в ознакомительных целях", не знаю, как на это реагировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 18:31 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MasterZivDima TС else я уже попадал как-то. Долго искал косяк в такой конструкции: Наверное поэтому используют в таких случаях не if, а while(0) с while(0) веселее получается. Тут вроде нет подводных камней? Разве что если несколько команд в одну строку написать через ;. MasterZivMasterZiv, А, ещё там лицензия типа "только в ознакомительных целях", не знаю, как на это реагировать... Поставил дома неделю назад VS2012 for Desktop. (Надо было пример для VC2008 запустить) Т.к. она ставилась пару часов (качая кучу всякой всячины) то так и не запустил. Разобрался без нее. Сейчас запустил. При первом старте сказала что 21 день остался и предложила зарегаться в микрософте. Отказался. Запустилась. Повторный запуск ничего не просит. Посмотрим что через 21 день скажет. Попробовал в ней Win32 Console проект сделать. Получилось. printf("Hello world!");Sleep(1000); отработал. Надо попробовать как оно в W2000 и в линуксе с вайном пойдет. Про только .NET я по старой памяти писал. Первый MSVC Express (2005 вроде) смотрел, расстроился что кроме .NET проектов нельзя в нем ничего сделать и забил. Похоже прогибается MS понемногу. И правильно. Лично я не сторонник ломаного софта, но и покупать не буду ради компиляции раз в год DLLки из пары сотен строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 18:53 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima TПоставил дома неделю назад VS2012 for Desktop. (Надо было пример для VC2008 запустить) Я говорил про VS EXPRESS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 19:15 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
MasterZivDima TПоставил дома неделю назад VS2012 for Desktop. (Надо было пример для VC2008 запустить) Я говорил про VS EXPRESS. В заголовке написано: Microsoft Visual Studio Express 2012 for Windows Desktop ЗЫ Похоже они там еще для телефонов и планшетов студий понаделали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2013, 19:21 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima TНадо попробовать как оно в W2000последняя студия, которая поддерживает W2K - это VS2008, можно разрабатывать в 2010й, но всё равно, использовать тулсет придётся от 2008й. про линь с вайном не скажу, не знаю. Лицензия у экспресса вполне себе позволяет разработку коммерческого софта, насколько я помню. И в 2005й студии точно был С++, только WinSDK надо было отдельно качать, тоже бесплатно, впрочем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 01:44 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima T, то бесплатная активация, где про 21 день. Формальность на минуту. И экспрес студия всегда была для C и сплюснутого. И для коммерческого исп. в т.ч. Вы как в танке.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 03:27 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Думаю надо покопать в сторону альтернативных компиляторов. Как-то у МС все сложнее и замороченней продукты становятся. Потребности у меня небольшие: собрать Win32 DLLку или утилитку без интерфейса (максимум с консолью). Это наверно все компиляторы смогут. А код набить можно и в Far`e. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 10:16 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima TА код набить можно и в Far`e. ну зачем же так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 11:08 |
|
||
|
Помогите победить препроцессор (не всё заменяет)
|
|||
|---|---|---|---|
|
#18+
Dima TДумаю надо покопать в сторону альтернативных компиляторов. Как-то у МС все сложнее и замороченней продукты становятся. Потребности у меня небольшие: собрать Win32 DLLку или утилитку без интерфейса (максимум с консолью). Это наверно все компиляторы смогут. А код набить можно и в Far`e. да, да вы все правильно поняли - зачем разбираться с этим препроцессором, и вообще, в этом WinSDK все так сложно, ведь можно найти на свою точку опоры приключение поинтересней, например: запили лобзиком (например - тцц) свой гэцеце, цигвин и прочий гнус. Это ведь так просто. А главное - как раз то что надо, чтобы "собрать деэлельку и утилитку". И эмаксЪ! Если бы вы не страдали фигней, и действительно были бы заняты собиранием своей деэлельки и утилитки, вам ничего не стоило бы все свести лишь к тому минимуму, что вами надо, вплоть до набивания в командной строке имен компилятора и сборщика. Но вы не ищите простых путей. Думаю вам лучше не заморачиваться нб мелочи а сразу идти в собиратели ядра линупса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 11:24 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38438520&tid=2019904]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
192ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 299ms |

| 0 / 0 |
