移植windows代码,使用什么代替__int64 _tmain和_TCHAR *?

时间:2010-06-24 08:14:02

标签: c++ windows gcc porting

我目前正在移植一些Windows代码,并尝试将其用于Ubuntu。该项目最初是用VC ++编译的,没有任何问题。另外我应该注意,这只需要在Ubuntu中工作,但更多平台独立的想法当然是受欢迎的。

大多数代码都易于移植,因为它主要是一个几乎没有OS特定部分的数值模拟项目。在移植版本中没有使用UNICODE,也没有任何需要支持它。

我想知道在尝试使用GCC编译此代码时的最佳做法,特别是:

什么被认为是最好的替代品:__ int64,_tmain和_TCHAR *?

谢谢!

3 个答案:

答案 0 :(得分:13)

对于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函数基本上......我实现了它们。这需要大约一个小时的编码,但它使项目移植到其他平台或编译器更容易。

答案 1 :(得分:2)

GCC支持long long(取决于编译标志),它是64-it整数。或者,您可以使用std::int64_t标题中的cstdint

或者要更加跨平台,请使用定义boost/cstdint.hpp

boost::int64_t

_tmain只是微软愚蠢(或非标准,如果你愿意的话)世界其他地方使用main,简单明了。 _TCHAR没有直接的等效内容,但由于您说您不需要支持wchar_t,因此您只需将其替换为char

答案 2 :(得分:0)

您可以使用Qt框架中的qint64(独立于平台),但可能有更简单的方法。