2010-06-24 2 views
7

저는 현재 일부 Windows 코드를 이식하고 있으며 우분투에서 사용할 수 있도록하려고합니다. 프로젝트는 원래 VC++로 컴파일되었지만 아무런 문제없이 시작되었습니다. 또한 이것은 우분투에서만 작동 할 필요가 있지만 플랫폼 독립적 인 아이디어는 확실히 환영합니다.Windows 코드 포팅, __int64 _tmain 및 _TCHAR * 대신 사용할 대상은 무엇입니까?

대부분의 코드는 대부분 OS의 특정 부분이 적은 수치 시뮬레이션 프로젝트이므로 이식하기 쉽습니다. 포팅 된 버전에는 유니 코드가 사용되지 않으며이를 지원할 필요가 없습니다.

나는 특히 모범 사례가 때 GCC 컴파일이 코드를 얻으려고 노력하는 것을 알고 싶습니다 :

위한 최선의 교체로 간주됩니다 무엇

: __int64, _tmain 및 _TCHAR *를?

감사합니다.

답변

12

다음 TCHAR 문제로서는

#include <inttypes.h> 
typedef int64_t __int64; 

. 실제로 TCHAR이 유용하다는 것을 알았 기 때문에 내가 사용하는 모든 _t 함수가있는 파일이 있습니다. _s 함수의 같은 예컨대

#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 

은 기본적으로 ... 나는 그들을 구현했습니다. 코딩하는 데 약 한 시간이 걸리지 만, 다른 플랫폼이나 컴파일러로 프로젝트를 옮기는 것이 매우 쉽습니다.

+0

이것은 정말 좋은 해결책처럼 보입니다. 감사합니다! – shuttle87

0

Qt 프레임 워크 (플랫폼 독립적 임)에서 qint64을 사용할 수 있지만 더 쉬운 방법이있을 것입니다. 64 비트

2

GCC는 컴파일 플래그에 따라 long long (64-it 정수)을 지원합니다. 또는 cstdint 헤더의 std::int64_t을 사용할 수 있습니다. boost::int64_t

_tmain을 정의

또는 더 크로스 - 플랫폼으로 사용 boost/cstdint.hpp, 그냥 마이크로 소프트입니다되는 세계의 나머지는 평범하고 단순 main을 사용 (당신이 할 경우, 또는 비표준) 바보. _TCHAR에는 직접적인 동일한 기능이 없지만 wchar_t을 지원할 필요가 없다고 했으므로 char으로 바꿀 수 있습니다.

+3

왜 downvote? – jalf

+1

정말 어리석지 만 역사적인 것은 아닙니다. '_tmain()'은 유니 코드를 지원하는 주요 OS가 없을 때 유니 코드를 위해 UCS-2와 함께 가기로 한 MS의 결정의 결과입니다. UCS-2는 16 비트 문자 단위를 기반으로했기 때문에'main()'은 "와이드 문자"/ 유니 코드 대응이 필요했고'_tmain()'은'main()'또는 16 비트 문자 등가로 해석되었습니다. 유니 코드 빌드가 컴파일되었는지 여부. 나중에 다른 OS에서 8 비트 문자 단위를 기반으로하는 UTF-8 버전을 사용했기 때문에'main() '을 계속 사용할 수 있었고 Windows는 여전히 UCS-2에서 UTF-16으로 변경되었습니다.이 버전은 여전히 ​​16 비트 문자 단위. – hippietrail

관련 문제