Портирование кода окон, что использовать вместо __ int64 _tmain и _TCHAR*?

Я в настоящее время портирую некоторый код окон и пытаюсь сделать его доступным для использования в Ubuntu. Проект был первоначально скомпилирован в VC ++ без любых проблем. Также я должен отметить, что это только должно работать в Ubuntu, но больше независимых от платформы идей, конечно, приветствуется.

Большая часть кода легка к порту, поскольку это - главным образом проект численного моделирования с немногими ОС определенные части. Нет никакого UNICODE, используемого в портированной версии, и там не будет никакой потребностью поддерживать это.

Я хотел бы знать то, что лучшие практики при попытке заставить этот код компилировать с GCC в особенности:

Что считается лучшей заменой для: __ int64, _tmain и _TCHAR*?

Спасибо!

8
задан shuttle87 24 June 2010 в 08:36
поделиться

3 ответа

Для 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, в основном ... я реализовал их. Это занимает около часа кодирования, но это делает перенос проектов на другие платформы или компиляторы НАМНОГО проще.

13
ответ дан 5 December 2019 в 11:22
поделиться

GCC поддерживает long long (в зависимости от флагов компиляции), которое является целым числом размером 64 it. Или вы можете использовать std :: int64_t из заголовка cstdint .

Или, чтобы быть более кроссплатформенным, используйте boost / cstdint.hpp , который определяет boost :: int64_t

_tmain - это просто глупость Microsoft (или нестандартность, если вы будете) Остальной мир использует main , простой и понятный. _TCHAR не имеет прямого эквивалента, но поскольку вы говорите, что вам не нужна поддержка wchar_t , вы можете просто заменить его на char .

2
ответ дан 5 December 2019 в 11:22
поделиться

Вы можете использовать qint64 из фреймворка Qt (независимо от платформы), но, вероятно, есть более простые способы.

0
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: