|
|
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Давайте, выкладывайте, не стесьняйтесь :-) У меня пока два, один для переключения между h и cpp, другой для комментирования/раскомментирования. Код: 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. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 11:54 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Поскольку никто не отзывается, предлагаю включить в тему и макросы С++ (параметрические #define). Из любимых: 1. #define DO_CASE(lCondition) if(lCondition){ #define CASE(lCondition) }else if(lCondition){ #define DEFAULT }else{ #define ENDCASE } т.е. перекрывается ограничение опертора case, что сравнивать можно только значения одной переменной с константами. Clipper forever! :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 2. #define RFOR(rR) for(;!(rR).IsEOF();(rR).MoveNext()) Для прохода по recordset'у. Не тратится строчка на MoveNext(). Код: plaintext 1. 3. #define ISNULL(rR,mF) (rR).IsFieldNull(&(rR).mF) При вызове IsFieldNull() не приходится два раза повторять имя recordset'a. if(ISNULL(rTable,m_Field)) ... а не if(rTable.IsFieldNull(&rTable.m_Field)) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 16:13 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Ой Вэй меня учили 2м вещам первое - никогда не эмулировать другие языки на C++ с помощью препроцессора второе - никогда не использовать макросы в C++ - там для этого есть templates С уважением... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 16:28 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
ну почему же :) иногда хочется покосить на паскаль :)) #define begin { #define end } #define procedure void procedure Test(int a = 0) begin // oops :)) end да ну это ак просто шютка я так не делаю ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 16:36 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
вот мои макросы шутка конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 16:38 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
funikovyuri 1.1. А при чём тут другие языки? 1.2. И никогда не креститься двумя пальцами, а яйцо разбивать только с острого конца... 2.1. И ASSERT ты не испольуешь, и TRACE? BOOL, DWORD? 2.2. Ну расскажи, как заменить хотя бы один из вышеописнных макросов на template. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 17:03 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
А я считаю что в некоторых вещях макросы необходимая вещь ... _________________________________________________________ ой сейчас запинают , так как нету убедительных аргументов ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 17:14 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Ой Вэй 1.1. А при чём тут другие языки? Ты предложил эмулировать синтаксис чего-то на C++ с помощью макроса - это не есть гут 2.1. И ASSERT ты не испольуешь, и TRACE? BOOL, DWORD? Я конечно же слишком категорично заявил - trace/assert конечно же допустимы - как и некоторые другие вспомогательные макросы - служащие управлению процессом компиляции - но не логики программы - твой же rfor к ним не относиться и это типичная задача для шаблона - который выполнит ее более качественно и безопасно с т.з. типов Далее - BOOL я не использую - уже давно есть bool ;) DWORD - тяжелое наследие MS Win32 - не мне тебя учить что есть typedef ... JibSkeart А я считаю что в некоторых вещях макросы необходимая вещь ... В каких например? Кроме тех что я уже описал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 17:55 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
funikovyuri 1.1 Ты предложил эмулировать синтаксис чего-то на C++ с помощью макроса — нет, я просто объяснил, откуда у этого растут ножки. это не есть гут — см. 1.2. Пока ты не объяснил причину, это всего лишь предрассудок. Мало ли кого чему учили... макросы - служащие управлению процессом компиляции, но не логики программы — аналогично. BOOL я не использую - уже давно есть bool ;) Это не одно и то же, и ты это знаешь. Я тоже предпочитаю bool, потому что оно синенькое :) , но есть ситуации, когда оно хуже. Ну есть typedef, ну и что? И для транслятора, и для человека, читающего текст программы — никакой разницы. (если есть, объясни) На 2.2. ты не ответил, и это самое главное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 18:50 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Ой Вэй Начнем с самого главного Код: plaintext 1. 2. 3. 4. 5. Это вообще не требует ни шаблонов ни макросов и делается с помощью функции вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Если интересуешься чем-то по сложнее - то см. std::foreach<> Я уже заколебался везде Голуба вставлять Глава 8.З(H). Шаблоны Ну есть typedef, ну и что? И для транслятора, и для человека, читающего текст программы — никакой разницы. 45.2. Не используйте заглавных букв в именах типов, созданных при помощи typedef. Пока ты не объяснил причину, это всего лишь предрассудок. Наши знания вообще - сплошные предрассудки :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 20:23 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
--funikovyuri --А я считаю что в некоторых вещях макросы необходимая вещь ... --В каких например? Кроме тех что я уже описал... темплейтные функции не поддерживают переменное число параметров, особенно когда еще переменое число типов как аргументы функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2004, 21:20 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Lepsik темплейтные функции не поддерживают переменное число параметров, особенно когда еще переменое число типов как аргументы функции. А разве это задача для макроса, а не для функции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2004, 08:24 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Один раз было :) Каюсь :) #define GetCSrc(h,i,s) strcpy(s,"");SendMessage(GetDlgItem(h,i),CB_GETLBTEXT,SendMessage(GetDlgItem(h,i),CB_GETCURSEL,0,0),(long)s) #define GetLSrc(h,i,s) strcpy(s,"");SendMessage(GetDlgItem(h,i),LB_GETTEXT,SendMessage(GetDlgItem(h,i),LB_GETCURSEL,0,0),(long)s) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2004, 11:17 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
2funikovyuri я это просто так сказал :)) хотел увидить реакцию , и бурно развивающуюся дискуссию ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2004, 11:19 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
funikovyuri Действительно, тот пример использования RFOR, который я привёл, легко реализуется в виде функции. Но с помощью этой функции можно сделать только это, а макрос имеет обобщённый характер. Код: plaintext 1. 2. 3. И не надо "клясться словами учителя". Ссылки, которые ты привёл, я прочитал. Такое впечатление, что автор программирует в раю, и у него нет ни сроков, ни необходимости, чтобы программа работала, а только бы следовать абстрактным принципам. Например: Одна из наиболее фундаментальных заповедей объектно-ориентированного проектирования запрещает оставлять незащищенными данные-члены в определении класса. Ха-ха. То есть если у меня в классе 20 переменных-членов, то я должен ещё объявить 40 функций. НЕ ДОЖДЁТЕСЬ! Кстати, в половине случаев, когда я сознательно делал члены защищёнными, чтобы отловить, где они меняются, ошибка содержалась в теле функций данного класса, т.е. защита не помогала. У макроса DO_CASE... есть ещё достоинства: 1) не надо писать в каждой ветке break, теряя строчку и рискуя его пропустить; 2) можно спокойно объявлять переменные внутри веток, не вставляя пару {} (теряются две строки) и не уезжая вправо. И один недостаток: он теоретически работает медленнее, чем switch. Да, и ещё он не синенький... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2004, 12:53 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Ой Вэй \r \r Но с помощью этой функции можно сделать только это, а макрос имеет обобщённый характер.\r \r В таком случае нужен template относительно этого "обобщенного действия"\r Side effects - это то чего следует избегать и отдавать на проверку компилятору - это генеральная стратегия - понятно что будут исключения - но они только подтверждают правило - т.е., если хочешь, пусть все мои замечания читаются как "рекомендации" - т.е. если знаешь что делаешь - делай - но сначала необходимо убедиться что нет более удобных средств\r \r Ха-ха. То есть если у меня в классе 20 переменных-членов, то я должен ещё объявить 40 функций. НЕ ДОЖДЁТЕСЬ! \r \r На повторение меня не хватит\r /topic/66973 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2004, 13:11 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
В таком случае нужен template относительно этого "обобщенного действия" Пример — в студию! Side effects - это то чего следует избегать и отдавать на проверку компилятору В данной ситуации нет ничего, чего не мог бы проверить компилятор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2004, 14:29 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Ой Вэй Код: plaintext 1. 2. 3. 4. 5. 6. 7. В данной ситуации нет ничего, чего не мог бы проверить компилятор. макрос - это средство сродки cut/paste - какая там может быть проверка у компилятора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2004, 15:09 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Как какая? Препроцессор развернёт, компилятор проверит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2004, 17:51 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Интересно - ты можешь хотя бы сформулировать что делает твой макрос? Т.е. просто сказать - я думаю врядли - так как он может делать что угодно - он не несет информации о поведении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2004, 18:00 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Только сейчас заметил твой пример (<class F>). Правда, не совсем понятно, что значит f(rR) — вызов конструктора? Но тогда набор действий, который я могу выполнить внутри такой template-функции, должен быть написан в функции какого-то класса. Более того, этот класс не будет знать о специфике rR (rR — не CRecordset, а порождённый от него). Интересно - ты можешь хотя бы сформулировать что делает твой макрос? Могу, иначе как бы я им пользовался? (посмотрел — 80 раз в одной программе, 70 раз в другой). Этот макрос обеспечивает проход по recordset'у, от текущей записи до конца. При этом он экономит силы и время пишущего, позволяя не писать второй раз имя переменной-recordset'a, а также MoveNext и IsEOF. Мне кажется, что читаемость программы этот макрос повышает, а не понижает. Т.е. просто сказать - я думаю врядли - так как он может делать что угодно - он не несет информации о поведении. Извини, этой фразы я просто не понял. Готов прекратить эту дискуссию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2004, 13:22 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Всё дело в том, какая у вас цель. Макросы полезны когда требуется Realtime, дабы не тратится на обращения к стеку и тому подобное. С компилятором всё-таки могут быть проблемы. Не помню точно, но вот чё-тоя в макросе такое написал, что ошибка у меня была на следующей строке... Ой Вэйзапрещает оставлять незащищенными данные-члены в определении класса.- воистину фигня. Кому надо, тот доберётся. И ломаются закрытые и открытые одинаково часто :) Ой ВэйИ один недостаток: он теоретически работает медленнее, чем switch. Да, и ещё он не синенький... Возрадуйся! :) Тут мы тебе поможем.(Если ты в VC работаешь). Заходишь в опции, в закладку "формат". Ищешь user defined keywords, ставишь синенький. Потом идёшь в Visual Studio\Common\MSDev98\Bin\ и создаёшь там файл usertype.dat В этом файле построчно пишешь все свои юзерские кейворды. Перезапускаешь студию. Счастье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 07:33 |
|
||
|
Полезные макросы для VC
|
|||
|---|---|---|---|
|
#18+
Ой Вэй Правда, не совсем понятно, что значит f(rR) Предпологается что F - это или функция или функтор - тогда f(rR) - это вызов этой функции либо оператора () этого функтора Более того, этот класс не будет знать о специфике rR (rR — не CRecordset, а порождённый от него). Там везде rR - это указатель - так что еще как будет Мне кажется, что читаемость программы этот макрос повышает, а не понижает. Да, но он ничего не гарантирует с т.з. поведения Готов прекратить эту дискуссию... Я тоже :) CEMb Макросы полезны когда требуется Realtime, дабы не тратится на обращения к стеку и тому подобное А про inline ты не забываешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2004, 10:24 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32383173&tid=2035494]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 324ms |

| 0 / 0 |
