Могу ли я позже преобразовать свой проект Win32 Visual C ++ в кроссплатформенный? - PullRequest
0 голосов
/ 11 ноября 2018

Кто-нибудь знает, возможно ли использовать код из статической библиотеки win32? в кроссплатформенном? Я знаю, что мне нужно внести некоторые изменения в код, но я думаю, что код на С ++ одинаков на всех платформах, кроме классов. Для простых типов кто-то сказал мне использовать int16_t или int16_fast_t вместо или short, например. Это правильно, что я мог бы просто скопировать заголовки и файлы союзника из Visual Studio и скомпилировать их для Mac, например, с Code Lite - если сам код является кроссплатформенным?

С наилучшими пожеланиями,

K

1 Ответ

0 голосов
/ 11 ноября 2018

Это зависит от того, что в этой библиотеке. Тот факт, что это проект статической библиотеки Visual C ++ Win32, говорит нам о том, как ваша библиотека компилируется. Он ничего не говорит нам о том, какой код входит в эту библиотеку. Это может быть совершенно переносимый стандартный код C ++. Это также может быть код, в котором каждая вторая строка представляет собой вызов функции Windows API, который, очевидно, не будет переносимым.

Будет ли код библиотеки переносимым, все зависит от кода. Замена short на int16_t или int_fast16_t ничего не сделает для увеличения переносимости кода (если только при первоначальном использовании short не предполагалось использование некоторых свойств, определяемых реализацией). Так что я не уверен, чего должна достичь полная замена short на int16_t. short - это фундаментальный тип, встроенный в язык. int16_t - это тип, определенный стандартной библиотекой , если целевая платформа поддерживает его. Таким образом, в некотором смысле, int16_t на самом деле менее переносим, ​​чем short. В то время как int_fast16_t всегда определяется, также short. Используйте целочисленные типы фиксированной ширины стандартной библиотеки, если вам нужна семантика, которую они предоставляют. Если нет, то нет причин использовать их. Обратите внимание: чтобы использовать целочисленные типы фиксированной ширины в C ++, включите заголовок C ++ <cstdint> вместо <stdint.h>, который не гарантированно присутствует в C ++. Также обратите внимание, что <cstdint> гарантированно помещает объявления только в пространство имен std. Поэтому для максимальной переносимости используйте std::int16_t, поскольку не гарантируется, что ::int16_t доступен.

Если код библиотеки переносимый, то все, что вам нужно для сборки этой библиотеки на другой платформе, - это система сборки для этой платформы. Так что да, это правильно, что если код переносим, ​​все, что вам нужно сделать, это скомпилировать этот код на другой платформе, используя любые инструменты, которые вы используете на этой другой платформе ... это своего рода определение того, что означает, что код должен быть переносной…; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...