|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Всем привет Я хоть и работал на С++ 2,5 года, но было это больше 10 лет назад Соответственно могу многое не знать Даже самых элементарных вещей Суть в чём У меня есть библиотека Tiny.Library Общий смысл такой. Низкоуровневый код пишется на Си (Clang), потом он компилируется на 5 операционных систем (по 2 битности), и уже *.o-файлы линкуются к Delphi Данная схема хорошо работает. Но возникло желание расширять количество пользователей Поэтому планирую добавлять поддержку С/С++ разных производителей. Хватило бы времени :) Хочу потягаться с известными парсерами XML/JSON, плюс у меня там заложен формат сериализации, который просят внедрить в одном из предыдущих проектов Получится/нет - другой вопрос :) Собственно, сейчас что я пытаюсь понять Меня интересует, как принято оформлять модули, доступные для Си и С++ Вот пишу я, например, набор дифайнов в хедере: Код: 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.
Все модули моей библиотеки используют этот хедер Соответственно все проекты, которые задействуют мою библиотеку - будут видеть данные дифайны Этот подход нормальный? Я, например, боюсь, если у кого-то переопределён дифайн likely или тип native_uint Хочу ещё добавить популярный дифайн offsetof На С++ есть неймспейсы, по идее можно обрамить скоуп неймспейсом Но как принято поступать, если хедер можно использовать как в С, так и в С++? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 15:03 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Макросы вне неймспейсов, так что обломись в любом случае. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 15:06 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOU Я хоть и работал на С++ 2,5 года, но было это больше 10 лет назад SOFT FOR YOU Хочу потягаться с известными парсерами XML/JSON ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 16:31 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Я вроде бы спросил не про проект, а про организацию модулей Давай порассуждаем на эту тему ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 16:50 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Если ты ориентируешься на чистый Си, то в нём ничего не поменялось за последние 10 лет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 17:18 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Я спрашиваю про С и С++ Зачем писать по 100500 реализация В h/c основные модули (доступные как на Си, так и на С++) В hpp/cpp шаблоны поверх h/c ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 17:30 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOU Соответственно все проекты, которые задействуют мою библиотеку - будут видеть данные дифайны Этот подход нормальный? Я, например, боюсь, если у кого-то переопределён дифайн likely или тип native_uint Хочу ещё добавить популярный дифайн offsetof Если нужно определять и переопределять "стандартные" типы - делают гирлянду ifdef завязанную на компилятор и платформу (как ее сообщает компилятор). Если не хочешь делать большой ifdef, то можно вынести все компиляторо-платформенные вещи в отдельные файлы. А поверх них делаешь один общий заголовочный файл в котором уже Код: plaintext 1. 2. 3. 4. 5.
Как вариант, раскидать платформенные файлы по разным каталогам, но с одинаковым именем файла. А потом подсовывать нужный каталог из сценария сборки. Чаще всего комбинируют эти подходы. На уровне ОС (windows/linux/etc) делают разные каталоги-файлы, потому что это легко понимать и поддерживать. А компиляторно-разрядный зоопарк разрешают ifdef'ами. За примерами ходи в большие библиотеки - Qt, wxWidgets. Или можешь поиграться с GNU Autotools. Она рассчитана в первую очередь на разные версии gcc/g++, но зато покажет как можно автоматизировать создание платформенно-зависимого заголовка. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 17:37 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOUЯ спрашиваю про С и С++ Тогда нужны два совершенно разных заголовка. Один для Си, другой для плюсов. И, соответстенно, две разные библиотеки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 17:54 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
White Owl, Большое спасибо! Так и буду делать ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 17:57 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Раз уж мы все здесь собрались, спрошу ещё вопросик Какая-то фигня. Понять не могу IDE CLion. CMakeLists: Код: sql 1. 2. 3. 4.
В main.cpp Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Пустые файлы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Если в powermm.h пишу следующее, то проблем нет: Код: plaintext 1.
Но если пишу void initialize_mempage();, а в реализации void initialize_mempage(){} - то возникает ошибка: неопределённая ссылка на «initialize_mempage()» При этом если то же самое делаю в *.hpp/*.cpp - то проблем нет Как блин это возможно? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 18:44 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, Вопросы дилетанта #include "../powermm.hpp" #include "../powermm.h" Зачем две строки, если достаточно заголовка? 2. Зачем нужно делать модули на чистом Си а не на плюсах? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 18:54 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOUКак блин это возможно? Туевой хучей разных способов от невключения соответствующего объектника в список линковки до опечатки в имени. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 19:10 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Я же вроде уже описал Функции доступны как на Си, так и на С++ В hpp плюсовые надстройки ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 19:33 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, Ну я и спросил, зачем код держать в двух ипостасях? Легаси код? Старый? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 19:36 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Полно проектов на Си За этим ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 19:38 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOUПолно проектов на Си Этим проектам парсинг ХМЛ напрочь не нужен. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 19:41 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Зато C++ ты не прилинкуешь к Delphi Не о том ты сейчас Вот смотри. Он создаёт 2 объектных файла: powermm.c.obj и powermm.cpp.obj Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
СМейкЛист: Код: plaintext 1. 2. 3.
Что ещё не хватает? Мне кажется объектник пустой Я давно не дизассемблировал объектники, там какая-то текстовая секция ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 19:47 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Кстати если сделать так, то всё нормально В чём прикол? ) Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 19:53 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, Поздравляю, всего 15 лет, и ты перешел на новую ступень развития - нулевый сишник! Начинай с учебников, что такое инклюды, препроцессор, как работает static... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 20:02 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Siemargl, То есть ты не знаешь, почему он не цепляет модуль? Спасибо, ты очень помог ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 20:08 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Жесть Ребят, ну вы чё? Могли бы подсказать ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Так работает ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 20:13 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOU Siemargl, То есть ты не знаешь, почему он не цепляет модуль? Спасибо, ты очень помог Последуя моему совету, ты сэкономишь время на изучение С. С++ можешь и не начинать, если у тебя нет эликсира вечной молодости. PS. И зачем тебе С? В Дельфи уже завезли компиляторы приличного качества. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 20:30 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
Siemargl SOFT FOR YOU Siemargl, То есть ты не знаешь, почему он не цепляет модуль? Спасибо, ты очень помог Просто теперь «модуль» — многозначное понятие в С++. Высказался товарищ корректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 20:40 |
|
Неймспейсы C/C++
|
|||
---|---|---|---|
#18+
SOFT FOR YOU, >Зато C++ ты не прилинкуешь к Delphi == вот я тоже на дельфи надцать лет не писал. Переведи что ты сказал. Хотя бы абзац текстом. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2021, 20:42 |
|
|
start [/forum/topic.php?fid=57&msg=40042647&tid=2017262]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 288ms |
total: | 550ms |
0 / 0 |