代码之家  ›  专栏  ›  技术社区  ›  shuttle87 Bhargav Boda

Porting windows code, what to use instead of __int64 _tmain and _TCHAR*?

  •  8
  • shuttle87 Bhargav Boda  · 技术社区  · 14 年前

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

    大多数代码易于移植,因为它主要是一个数值模拟项目,很少有操作系统特定的部分。移植版本中没有使用Unicode,因此不需要任何支持。

    我想知道在试图用gcc编译此代码时,最佳实践是什么,特别是:

    什么是最好的替代品:u int64、tmain和tchar*?

    谢谢!

    3 回复  |  直到 10 年前
        1
  •  13
  •   Community gkalpak    10 年前

    对于64位:

    #include <inttypes.h>
    typedef int64_t __int64;
    

    至于TChar问题。我发现tchars非常有用,所以我有一个包含我在其中使用的所有函数的文件。

    例如

    #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
    

    至于基本上的函数…我实现了它们。这需要大约一个小时的编码工作,但它使将项目移植到其他平台或编译器变得非常容易。

        2
  •  2
  •   Stack Overflow is garbage    14 年前

    海湾合作委员会支助 long long (取决于编译标志),它是一个64位整数。或者你可以使用 std::int64_t cstdint 标题。

    或者更跨平台,使用 boost/cstdint.hpp 定义 boost::int64_t

    _tmain 仅仅是微软愚蠢(或者说不规范,如果你愿意的话)世界其他地方使用 main 简单明了。 _TCHAR 没有直接等价物,但既然你说你不需要支持 wchar_t 你可以用 char .

        3
  •  0
  •   metdos    14 年前

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