我目前正在移植一些Windows代码,并尝试将其用于Ubuntu。该项目最初是用VC ++编译的,没有任何问题。另外我应该注意,这只需要在Ubuntu中工作,但更多平台独立的想法当然是受欢迎的。
大多数代码都易于移植,因为它主要是一个几乎没有OS特定部分的数值模拟项目。在移植版本中没有使用UNICODE,也没有任何需要支持它。
我想知道在尝试使用GCC编译此代码时的最佳做法,特别是:
什么被认为是最好的替代品:__ int64,_tmain和_TCHAR *?
谢谢!
答案 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(独立于平台),但可能有更简单的方法。