Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Собственно сабж. Можно ли исполнить макрос такого, вида, чтоб понимал код ниже: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. C++ ные оверлоды с дефолтами, темплейты и прочую подобную C++ ерунду не предлагать, интересует тру С, который код выше преобразует в код вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. собственно как аналог лисповских (+ 1 2), (+ 1 2 3 4 5 6) ну и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:06 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Можно взять stdarg.h и сделать функцию с переменным числом аргументов которая просто решит данную задачу. А если нужен альтернативный макро-процессор то... я не уверен это будет "честное" С решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:21 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
maytonМожно взять stdarg.h и сделать функцию с переменным числом аргументов которая просто решит данную задачу. А если нужен альтернативный макро-процессор то... я не уверен это будет "честное" С решение. функция не катит, т.к. ее параметры не могут быть вычислены-соптимизированы компилятором заранее. альтернативный макропроцессор не нужет, в родном достаточно фич. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:28 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaСобственно сабж. Можно ли исполнить макрос такого, вида, чтоб понимал код ниже: Все что можно на темплейтах - можно и на макросах, единственное отличие - на макросах сообщения об ошибке компилятора всегда в строке начала определения макроса, т.е. можно такое. Variadic Macros есть. Так что вперёд и с песней! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:39 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaC++ ные оверлоды с дефолтами, темплейты и прочую подобную C++ ерунду не предлагать, интересует тру С, который код выше преобразует в код вида А это уже нам решать, предлагать или нет ))) nojavaфункция не катит, т.к. ее параметры не могут быть вычислены-соптимизированы компилятором заранее. Катит. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:43 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Вася УткинВсе что можно на темплейтах - можно и на макросах, единственное отличие - на макросах сообщения об ошибке компилятора всегда в строке начала определения макроса, т.е. можно такое. Variadic Macros есть В макросах перегрузки нет. Поэтому рекурсию делают через одно место ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:52 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА это уже нам решать, предлагать или нет ))) сказано же - стандартный темплейт головного мозга не нужен. решение на стековерфлоу уже найдено, была проблема с кроссплатформой, NUMARGS в MSVC не работает как надо. это поборолось тоже, отдельно но вы продолжайте, продолжайте постать свои темплейт-функции укатайки, как проявление клоунады вполне себе покатит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 15:53 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaрешение на стековерфлоу уже найдено, ... но поскольку его код надо полчаса разобрать с поллитрой, то его стыдно опубликовать ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:01 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskynojavaC++ ные оверлоды с дефолтами, темплейты и прочую подобную C++ ерунду не предлагать, интересует тру С, который код выше преобразует в код вида А это уже нам решать, предлагать или нет ))) nojavaфункция не катит, т.к. ее параметры не могут быть вычислены-соптимизированы компилятором заранее. Катит. Код: 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. А так не лучше? http://ideone.com/0e9Mpe Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:01 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася УткинВсе что можно на темплейтах - можно и на макросах, единственное отличие - на макросах сообщения об ошибке компилятора всегда в строке начала определения макроса, т.е. можно такое. Variadic Macros есть В макросах перегрузки нет. Поэтому рекурсию делают через одно место ))) есть в макросах перегрузка. кури мануал на тему _generic твоя категоричность продолжает неимоверно радовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:03 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskynojavaрешение на стековерфлоу уже найдено, ... но поскольку его код надо полчаса разобрать с поллитрой, то его стыдно опубликовать ))) да пожалуйста. http://stackoverflow.com/questions/824639/variadic-recursive-preprocessor-macros-is-it-possible http://stackoverflow.com/questions/2124339/c-preprocessor-va-args-number-of-arguments если у тебя разбор подобного требует поллитры и полчаса... может стоить прекратить пить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:05 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaAnatoly Moskovskyпропущено... ... но поскольку его код надо полчаса разобрать с поллитрой, то его стыдно опубликовать ))) да пожалуйста. http://stackoverflow.com/questions/824639/variadic-recursive-preprocessor-macros-is-it-possible http://stackoverflow.com/questions/2124339/c-preprocessor-va-args-number-of-arguments если у тебя разбор подобного требует поллитры и полчаса... может стоить прекратить пить? Вы правы, шаблоны это громоздко и непонятно: http://ideone.com/QPylGU Код: plaintext 1. 2. макросы намного понятней, лаконичней и легче поддаются отладке: http://stackoverflow.com/questions/2124339/c-preprocessor-va-args-number-of-arguments Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:12 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Вася УткинВы правы, шаблоны это громоздко и непонятно: http://ideone.com/QPylGU Код: plaintext 1. 2. ты сначала это в MSVC скомпилируй, потом приходи, ага. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:13 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaесть в макросах перегрузка. кури мануал на тему _generic Даже стесняюсь спросить, но в вопросе есть слово MSVC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:30 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Вася УткинА так не лучше? http://ideone.com/0e9Mpe Код: plaintext 1. 2. Ну, оно может короче, но ничем не лучше тех макросов по читаемости, т.к. надо разбираться что там происходит. Например tmp там только для побочных эффектов. Ну и только свежие компиляторы с С++14 такое проглотят. А то что я привел - это чистый С++11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 16:44 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyВася УткинА так не лучше? http://ideone.com/0e9Mpe Код: plaintext 1. 2. Ну, оно может короче, но ничем не лучше тех макросов по читаемости, т.к. надо разбираться что там происходит. Например tmp там только для побочных эффектов. Ну и только свежие компиляторы с С++14 такое проглотят. А то что я привел - это чистый С++11. интереса ради решил покомпилировать ваши закорючки, сравнить дизассемблер. и? оба ваших чудаковых "решения" в принципе не понимают вызов функции, ибо тупо constexpr приплыли. парни, вы серьезно? какой смысл делать variadic param ADD макрос, чтоб он принимал и выдавал только константу? в задаче compile time only не ставилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 18:10 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskynojavaесть в макросах перегрузка. кури мануал на тему _generic Даже стесняюсь спросить, но в вопросе есть слово MSVC я еще могу понять претензию, что требование компиляции под GCC 4.4 (или 2.98), уже неактуальна. но выбрасывать единственный реально работающий C/C++ компилятор для платформы, которая занимает 90% десктопа и минимум 50% серверов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 18:58 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaпарни, вы серьезно? какой смысл делать variadic param ADD макрос, чтоб он принимал и выдавал только константу? в задаче compile time only не ставилось. Затем, что топик стартер в порыве высокомерия не догадался привести реальный юзкейс, и пришлось привести абстрактный пример ))) Уберите constexpr, и будет вам не только константа. nojavaя еще могу понять претензию, что требование компиляции под GCC 4.4 (или 2.98), уже неактуальна. но выбрасывать единственный реально работающий C/C++ компилятор для платформы, которая занимает 90% десктопа и минимум 50% серверов... Так что там, откомпилируется _generic в MSVC? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 19:26 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaесть в макросах перегрузка. кури мануал на тему _generic твоя категоричность продолжает неимоверно радовать. Кстати покурил это ваш мануал. 1) _Generic конечно же никакого отношения к перегрузке в макросах не имеет. Это конструкция самого языка, а не препроцессора. Соответственно никакой перегрузки в макросах с его помощью естественно не сделаешь. Но спасибо что указали на мою категоричность ))) 2) Отдельно позабавило, как С-шники смело (почти как и вы) рассказывают, чего не умеет С++. Оказывается в С++ нельзя разные типы возвращать в перегруженных функциях. Generic selection is similar to overloading in C++ (where one of several functions is chosen at compile time based on the types of the arguments), except that it makes the selection between arbitrary expressions, which, unlike function overloads, may have different return types and even different value categories. 3) Сама эта конструкция _Generic - яркий пример упоротости С-шников. Вместо того чтобы сделать нормальные перегрузки с одинаковыми именами и разным набором параметров, они добавляют в язык синтаксического монстра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 21:02 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Предлагаю засунуть в макрос что то типа i++ и угадать что получится. Можно и функцию с таким же эффектом, если ТС так хочет. Но что написал Уткин, я вообще не понял. Я бы написал так Код: 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. Ассемблер gcc 4.9.2 -O3 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 21:04 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
SiemarglНо что написал Уткин, я вообще не понял. Да, там не сильно очевидно. Вот это Код: plaintext 1. заменяется при инстанцировании на Код: plaintext 1. Соответственно, как побочный эффект от инициализации массива tmp будет прибавление к val всех остальных аргументов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 21:55 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Я с начала топика подумал-было что автор хочет средствами макропросессора С реализовать каррирование ADD. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 22:55 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
nojavaСобственно сабж. Можно ли исполнить макрос такого, вида, чтоб понимал код ниже: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. C++ ные оверлоды с дефолтами, темплейты и прочую подобную C++ ерунду не предлагать, интересует тру С, который код выше преобразует в код вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. собственно как аналог лисповских (+ 1 2), (+ 1 2 3 4 5 6) ну и т.д. А почему тебе именно макрос нужен ? Чем функция не устраивает ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2016, 23:42 |
|
||
|
Макросы в Lisp стиле, возможно ли это: (+ , (-
|
|||
|---|---|---|---|
|
#18+
Выше автор писал в задаче compile time only не ставилось. значит вызов функции или цепочки функций ему вполне себе подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2016, 00:07 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39284039&tid=2018462]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 300ms |
| total: | 473ms |

| 0 / 0 |
