Я в настоящее время портирую некоторый код окон и пытаюсь сделать его доступным для использования в Ubuntu. Проект был первоначально скомпилирован в VC ++ без любых проблем. Также я должен отметить, что это только должно работать в Ubuntu, но больше независимых от платформы идей, конечно, приветствуется.
Большая часть кода легка к порту, поскольку это - главным образом проект численного моделирования с немногими ОС определенные части. Нет никакого UNICODE, используемого в портированной версии, и там не будет никакой потребностью поддерживать это.
Я хотел бы знать то, что лучшие практики при попытке заставить этот код компилировать с GCC в особенности:
Что считается лучшей заменой для: __ int64, _tmain и _TCHAR*?
Спасибо!
Для 64-битной версии:
#include <inttypes.h>
typedef int64_t __int64;
Что касается проблемы TCHAR. На самом деле я считаю TCHAR'ы довольно полезными, поэтому у меня есть файл со всеми _t-функциями, которые я использую в нем.
e.g
#ifdef UNICODE
#define _tcslen wcslen
#define _tcscpy wcscpy
#define _tcscpy_s wcscpy_s
#define _tcsncpy wcsncpy
#define _tcsncpy_s wcsncpy_s
#define _tcscat wcscat
#define _tcscat_s wcscat_s
#define _tcsupr wcsupr
#define _tcsupr_s wcsupr_s
#define _tcslwr wcslwr
#define _tcslwr_s wcslwr_s
#define _stprintf_s swprintf_s
#define _stprintf swprintf
#define _tprintf wprintf
#define _vstprintf_s vswprintf_s
#define _vstprintf vswprintf
#define _tscanf wscanf
#define TCHAR wchar_t
#else
#define _tcslen strlen
#define _tcscpy strcpy
#define _tcscpy_s strcpy_s
#define _tcsncpy strncpy
#define _tcsncpy_s strncpy_s
#define _tcscat strcat
#define _tcscat_s strcat_s
#define _tcsupr strupr
#define _tcsupr_s strupr_s
#define _tcslwr strlwr
#define _tcslwr_s strlwr_s
#define _stprintf_s sprintf_s
#define _stprintf sprintf
#define _tprintf printf
#define _vstprintf_s vsprintf_s
#define _vstprintf vsprintf
#define _tscanf scanf
#define TCHAR char
#endif
Что касается функций _s, в основном ... я реализовал их. Это занимает около часа кодирования, но это делает перенос проектов на другие платформы или компиляторы НАМНОГО проще.
GCC поддерживает long long
(в зависимости от флагов компиляции), которое является целым числом размером 64 it. Или вы можете использовать std :: int64_t
из заголовка cstdint
.
Или, чтобы быть более кроссплатформенным, используйте boost / cstdint.hpp
, который определяет boost :: int64_t
_tmain
- это просто глупость Microsoft (или нестандартность, если вы будете) Остальной мир использует main
, простой и понятный.
_TCHAR
не имеет прямого эквивалента, но поскольку вы говорите, что вам не нужна поддержка wchar_t
, вы можете просто заменить его на char
.
Вы можете использовать qint64 из фреймворка Qt (независимо от платформы), но, вероятно, есть более простые способы.