#c #c #windows #visual-studio
#c #c #Windows #visual-studio
Вопрос:
Каковы недостатки реализации библиотеки C в C ? Библиотека будет использоваться для создания приложения Windows для обычного ПК с использованием Visual Studio 2008 или новее. Непонятно, почему в спецификациях указано, что это должна быть библиотека C. Я предполагаю, что им нужен простой C-API, а не чистый C lib. Но мой босс не согласен.
В любом случае, я хочу extern "C"
использовать все объявления функций и использовать C в файлах реализации. Я провел некоторое тестирование, и все работало просто отлично, даже когда приложение было скомпилировано как C (изменив параметр project в Visual Studio).
Комментарии:
1. Я думаю, вам нужно спросить своего клиента, что они подразумевают под этим. Если они собираются использовать эту библиотеку на встроенном устройстве без libsdtc , вы облажались.
2. Я не знаю конкретно о Visual Studio, но в целом, если библиотека должна быть связана с программой на C, ее создание на C (с объявлениями extern «c») может вызвать проблемы, если компоновщик не знает, как выполнить запуск C . Если вам когда-нибудь понадобится перенести это как библиотеку, дружественную к C, на другой компилятор, реализация на чистом C, вероятно, является более безопасным решением.
3. Кстати, я бы согласился с вами. То, что ваш босс думает, что клиент будет заботиться об исходном языке скомпилированного кода, а не об API в указанном коде, заставляет меня задуматься, как он кому -то начальник.
4. @Tomalak: Библиотеки C , вероятно, требуют времени выполнения C и, возможно, инициализации C , что делает их нежелательными в программах на C. Если бы я попросил библиотеку C и получил библиотеку C с оболочкой, я бы расстроился.
5. Другой пример: если клиент собирается получать исходный код, он может захотеть, чтобы он был написан на C, чтобы он мог его понять.
Ответ №1:
Я видел, как люди делали это, скажем, для предоставления коллекций STL программам на C. Если вы уверены, что библиотека будет использоваться только в средах с нормальными компиляторами C / C (скажем, только VS и gcc) Я думаю, что это довольно безопасная вещь с технической точки зрения. Нет, похоже, у вас здесь какое-то внешнее требование, но, очевидно, мы не можем это комментировать. Может быть хуже двойной проверки с источником требований?
ОБНОВЛЕНИЕ: о, я должен упомянуть, что это повлияет на библиотеки DLL, которые потребуются вашей библиотеке. Как и C runtime DLL, необходимо будет загрузить в дополнение к CRT.
Ответ №2:
Внешний c используется, как и всегда, для переноса некоторых функций с c на c . Например, оператор new в свою очередь вызывает malloc() из стандартного c. Это один хороший пример того, как библиотеке c придается вид c . новый оператор значительно упрощает выделение памяти и в дополнение к этому также предоставляет множество функций, таких как перегрузка оператора, которая недоступна в c. Я предполагаю, что нужно было бы добавить больше функциональности и создать аккуратные интерфейсы.
Если вы думаете о недостатках, то это может быть связано с проблемами, связанными с компилятором, когда ABL, сгенерированный для программы на c , отличается от C, и если компилятор не способен различать их, тогда вы столкнулись с этим.
Я не уверен, что это то, что вы ищете, если не попробовать эту ссылку, это может оказать некоторую помощь.
http://www.informit.com/guides/content.aspx?g=cplusplusamp;seqNum=180
Ответ №3:
Если они собираются использовать ее для программы на C, т. Е. main()
Функция компилируется компилятором C, тогда вы должны быть очень осторожны с вашей библиотекой C . Проблема в том, что программа c не будет выполнять какой-либо конструктор для статических переменных. Таким образом, вы должны исключить использование любых статических переменных с помощью constructor. Это легко для самой вашей библиотеки, но вы должны проверять каждый вызов библиотечной функции C , если она зависит от существования статической инициализированной переменной (например std::cout
, std::cin
и т.д.).