Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оповещение об ошибках в C, кто как делает? 
:(
    Опции темы
Randajad
Дата 20.6.2012, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



А почему нельзя написать внутренности библиотеки на C++, а экспорты сделать на C с возвратом кодов ошибок?
PM MAIL   Вверх
kosmonaFFFt
Дата 25.6.2012, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Тогда неудобно получается работать с функциями, которые должны что-то возвращать... Внутренности конечно можно на С++ написать, но опять же, даже исключениями нормально не воспользуешься...

Я пока склоняюсь к мысли протаскивать в каждую функцию последним аргументом указатель на структуру, в которую класть код ошибки и информацию о файле/строке, где ошибка произошла (и если хочется ошибку игнорировать, просто передавать NULL)...


--------------------
user posted image
PM MAIL ICQ   Вверх
Randajad
Дата 25.6.2012, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Да вроде как вполне удобно. Многие функции в винапе такие. По указателю передавать переменную, в которую будет писать результаты своей деятельности.
А насчет исключений можно по-подробнее? Мы же их кидать в приложение не будем.

Это сообщение отредактировал(а) Randajad - 25.6.2012, 12:06
PM MAIL   Вверх
kosmonaFFFt
Дата 25.6.2012, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Если делать библиотеку на C++ с интерфейсом на C и кидать исключения из начинки, то ничего хорошего не получится... Смысл тогда использовать C++ не вижу...


--------------------
user posted image
PM MAIL ICQ   Вверх
Randajad
Дата 25.6.2012, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Смысл - для удобства разработки библиотеки. smile
Али религия не позволяет писать на С++? smile
С слишком аскетичен.

Это сообщение отредактировал(а) Randajad - 25.6.2012, 12:07
PM MAIL   Вверх
kosmonaFFFt
Дата 25.6.2012, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Для моих целей вполне хватает и C, а все плюшки C++ типа ООП, исключений и шаблонов вместе с STL разбиваются об необходимость иметь интерфейс на C.


--------------------
user posted image
PM MAIL ICQ   Вверх
math64
Дата 25.6.2012, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Randajad, Ну вот допустим, библиотека написана на C++ с C-интерфейсом. Пользовательская программа - тоже на C++.
1. Библиотека и пользовательская программа компилируется одним и тем же компилятором - Ок, но зачем тогда C-интерфейс?
2. Библиотека и пользовательская программа компилируются разными компиляторами, для каждой нужна своя runtime-библиотека, могут быть проблемы.
Я как-то пытался состыковать программу, наприсанную на C++ Builder 6.0 с dll, написанной на C++ Builder 5.0 - проще оказалось перекомпилировать библиотеку на C++ Builder 6.0 чем заставить нормально работать вместе разные версии компилятора.
PM   Вверх
Randajad
Дата 25.6.2012, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 15.3.2012

Репутация: 8
Всего: 8



Значит, религия.
Как ни крути, а количество кода, при написании на С резко увеличивается. Даже буста нету.
То, что экспортируемый интерфейс на С - не причина отказываться от многих возможностей языка. Тем более, 11 стандарт как никак.

Добавлено @ 12:54
Библиотека динамическая? Линкуем статически CRT.

Добавлено @ 12:56
С интерфейс нужен для каких-либо плагинов. Если же и библиотека и приложение разрабатываются одним автором, причем библиотека планирует использоваться только в этом приложении - зачем она тогда вообще нужна? Если же он ее позиционирует еще как отдельный продукт- это уже его дело, делать ей С интерфейс, или нет.

Добавлено @ 12:59
Вообще, я крайне не люблю тех, кто линкует CRT динамически. Особенно это касается студии. Из-за того, что люди не хотят, чтобы их экзешка распухла на 30 килобайт, юзверям приходится устанавливать метры всяких MSVC Redist...

Да, в некоторых случаях это оправдано. Если же автор положит все нужные дллки сам в комплект, - то вообще вопросов нет. Но многие об этом даже не задумываются, из-за чего приходится гуглить очередной редист и ставить.

Это сообщение отредактировал(а) Randajad - 25.6.2012, 13:07
PM MAIL   Вверх
kosmonaFFFt
Дата 25.6.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис

Репутация: нет
Всего: 5



Пользовательская программа будет с большой степенью вероятности на чем-то высокоуровневом, типа python+pyqt или .NET, соответственно C-интерфейс нужен для возможности создания биндингов в высокоуровневый язык...

Цитата(Randajad @  25.6.2012,  16:53 Найти цитируемый пост)
Вообще, я крайне не люблю тех, кто линкует CRT динамически. Особенно это касается студии. Из-за того, что люди не хотят, чтобы их экзешка распухла на 30 килобайт, юзверям приходится устанавливать метры всяких MSVC Redist...

Да, в некоторых случаях это оправдано. Если же автор положит все нужные дллки сам в комплект, - то вообще вопросов нет. Но многие об этом даже не задумываются, из-за чего приходится гуглить очередной редист и ставить.

Обычно нормальные авторы тогда делают нормальные инсталляторы, которые сами ставят редист...



--------------------
user posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0581 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.