Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Пишу как водится программу и вот хочется в ней иметь возможность вывода отладочных сообщений на экран которые бы не попали в релизную версию те при определенном символе __DEBUG. Задача вроде тривиальная но видимо я в трех соснах включился в состоянии рейс кондишн :) Отладочных сообщений очень много так как программа сильно сильно многопоточная и покрывать весь текст программы конструкциям #ifdef __DEBUG std::cout << msg <<msg2 <<endl; #endif как то неаккуратненько – за лесом не будет видно деревьев. А я вот люблю изящество написания… есть такой грешок. Тут еще такое дело что я очень активно пользую операцию << что очень удобно когда нужно выводить сообщение а вселед за ним сразу значения переменных, адреса из и всяко такое. Пока сделал так Код: plaintext 1. 2. 3. 4. 5. В программе работает Код: plaintext 1. 2. 3. 4. Вывод будет Begin to work and continue and adress i 0xbfac193c И релиз версия собирается соответственно. Но гложет меня смутные сомнения, что как то это неаккуратенько. Что можно наверно сделать через шаблоны покрасившее. Потому и спрашиваю – в то время как Александреску бороздит просторы большого театра мы вот все с макросами и те выглядят как то корявенько :) Есть идеи? Ее одно – прога по старому стандарту – не по 11 так что вариадики не предлагать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 13:37 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
LowCoder, Я думаю то чего вы хотите невозможно. И шаблоны тут не помогут. Вам нужно еще учесть что бы вывод не только был или не был... А что бы еще и параметры которые вы передаете в лог "не вычислялись" в процессе исполнения (и не компилировались даже). А такое умеют только макросы. А у макросов проблема когда в них передается нечто содержащие запятую. Но это думаю можно решить с помощью макросов с переменным количеством параметров. В данном случае. Так что в смысле красоты -- тот или иной фокус с макросами. И можно для красоты не писать макрос БОЛЬШИМИ буквами -- иногда можно и отступить от стандартов. PS: Хм... хотя по поводу не вычисления параметров можно попробовать сыграть на укороченном вычислении логических выражений? Но не приходит ничего в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 15:37 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
LowCoder, Через макрос, так как вы написали - правильное направление. Ничего там неаккуратного нет. Разве что надо убрать ";" в обоих вариантах макроса. Иначе будут проблемы с конструкциями вида Код: plaintext 1. 2. 3. 4. Это развернется в: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 15:51 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
petrav И можно для красоты не писать макрос БОЛЬШИМИ буквами -- иногда можно и отступить от стандартов. Да никто этих стандартов и не придерживается. Тот же assert реализуется как макрос в том же MSVC11(MSVS2012): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. И используют: assert(x != y, "My message"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 16:15 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
assert как макросДа никто этих стандартов и не придерживается. Тот же assert реализуется как макрос в том же MSVC11(MSVS2012): К реализациям стандартных библиотек совсем другие требования по именованию символов, чем к прикладным программам. Начнем с того что некоторые имена в стандартах прямо заданы (например assert) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 16:29 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyassert как макросДа никто этих стандартов и не придерживается. Тот же assert реализуется как макрос в том же MSVC11(MSVS2012): К реализациям стандартных библиотек совсем другие требования по именованию символов, чем к прикладным программам. Начнем с того что некоторые имена в стандартах прямо заданы (например assert) А где описан то этот стандарт написания прикладных программ? :) А assert по другому никак и не сделаешь потому, что он использует __FILE__ и __LINE__. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 16:35 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
__FILE__ и __LINE__А где описан то этот стандарт написания прикладных программ? :) А assert по другому никак и не сделаешь потому, что он использует __FILE__ и __LINE__. Ну это же просто правила хорошего тона писать макросы заглавными буквами. Просто иногда это опускают, по тем или иным причинам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 16:51 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
assert как макросИ используют: assert(x != y, "My message"); Ээээ... А откуда это комментарий-сообщение взялося? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 16:52 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
petravИ можно для красоты не писать макрос БОЛЬШИМИ буквами -- иногда можно и отступить от стандартов . petravНу это же просто правила хорошего тона писать макросы заглавными буквами. Было стандартом, а уже стало правилом хорошего тона? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 17:01 |
|
||
|
Отладочные сообщения
|
|||
|---|---|---|---|
|
#18+
Благодарю за ответы интерсно на мой вопрос ответили и тут кстати еще вопрос а зачем в макросе Код: plaintext 1. перед !!(_Expression) два знака !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2013, 17:51 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38242631&tid=2020255]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 275ms |
| total: | 429ms |

| 0 / 0 |
