我目前正在移植一些Windows代码,并试图使其在Ubuntu中可用。该项目最初是用VC++编译的,没有任何问题。我还要注意,这仅需要在Ubuntu中工作,但是当然欢迎更多与平台无关的想法。

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

我想知道在尝试使此代码与GCC一起编译时的最佳做法是什么,尤其是:

什么被认为是__int64,_tmain和_TCHAR *的最佳替代品?

谢谢!

最佳答案

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

关于c++ - 移植Windows代码,用什么代替__int64 _tmain和_TCHAR *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3108220/

10-13 06:41