Портирование кода Windows, что использовать вместо __int64 _tmain и _TCHAR *? - PullRequest
8 голосов
/ 24 июня 2010

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

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

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

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

Спасибо!

Ответы [ 3 ]

13 голосов
/ 24 июня 2010

Для 64-разрядных:

#include <inttypes.h>
typedef int64_t __int64;

Что касается проблемы TCHAR.Я на самом деле нахожу TCHAR довольно полезными, поэтому у меня есть файл со всеми функциями _t, которые я использую.

например

#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 в основном ... Я реализовал их.Требуется около часа написания кода, но это НЕМЕДЛЕННО облегчает перенос проектов на другие платформы или компиляторы.

2 голосов
/ 24 июня 2010

GCC поддерживает long long (в зависимости от флагов компиляции), что является 64-целым числом.Или вы можете использовать std::int64_t из заголовка * 1003. *быть глупым (или нестандартным, если хотите). Остальной мир использует main, простой и понятный._TCHAR не имеет прямого эквивалента, но поскольку вы говорите, что вам не нужно поддерживать wchar_t, вы можете просто заменить его на char.

0 голосов
/ 24 июня 2010

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

...