2012-06-20 2 views
3

나는 이 C++에서 사용되는 반면 BOOLint으로 정의되는 Microsoft 특정 유형임을 알고 있습니다.bool 대신 BOOL 유지

내 코드는 Windows 용으로 만들어 졌기 때문에 BOOL을 사용하고 있지만, Mac으로 옮길 때 BOOL에서 내 코드를 변경하지 않고 같은 방식으로 유지하려고합니다.

이 작업을 수행 할 수 있습니까?

typedef int8_t _Bool;   
    typedef _Bool (BOOL); 
    static const BOOL False = 0; 
    static const BOOL True = 1; 

그렇다면 좋은 방법이 있고 그 이유는 무엇입니까?
그렇지 않은 경우 왜 대신해야하며 어떻게해야합니까?

+0

다국어 소스 파일을 작성하는 것은 어렵습니다! 나는 당신이 한 번에 한 언어에 충실하는 것이 좋습니다. – pmg

+0

필자는해야하지만, 소스를 많이 변경하지 않고 A에서 B로 포트를 옮기려고합니다. – user1417815

답변

1

int로 정의됩니다, 당신은 당신이 어떻게 든 포팅 코드의 일부는 그것이 int 인에 의존 여부를 확인하지 않고 모른다.

따라서, 내가 좋아하는 뭔가를 갈 것 :

#if NOT_MICROSOFT 
    typedef int BOOL; 
    #define TRUE 1 
    #define FALSE 0 
#endif 

당신이 포팅하고있는 코드가 제대로 유형에 관계없이 BOOL 정말 int 또는 정말 bool 여부 작동하는지 확인 할 수있는 기회가 있다면, 대부분 bool을 사용하거나 (원하는 경우 int8_t) 사용하도록 변경할 수 있습니다.

2

당신은 맨 위의 헤더 파일에이 같은 작업을 수행 할 수 있습니다 다른 옵션은 미리 정의 매크로를, 예를 들어, 시간의 컴파일 옵션을 사용 할 수 있습니다

#ifndef /* MICROSOFT specific macro */ 
typedef bool BOOL; 
static const BOOL True = true; // True or TRUE 
static const BOOL False = false; // False or FALSE 
#endif 

g++ -DBOOL=bool

+0

By :/* MICROSOFT 특정 매크로 */#ifdef _WIN32? – user1417815

+0

@ user1417815의 경우, _WIN32 또는 MS 플랫폼 용으로 정의되는 매크로가 될 수 있지만 Linux, Mac 등과 같은 다른 플랫폼에는 정의되지 않습니다. – iammilind

6

좋은 IDE가 BOOL에서 bool로 전역 변경을 수행 할 수없는 이유가 없습니다. 나는 더 큰 휴대 성을 원한다. 나는 typedef를 좋아하지 않을 것이다. 왜냐하면 읽는 것이 더 어려울 것이기 때문이다.

+0

참, 코드를 변경하지 않고 동일하거나 거의 동일하게 유지하려고합니다. – user1417815

+1

유익한 변화를 만들 기회입니다 - 이점을 활용하십시오. 반창고는 이제까지 벗어나지 않을 것입니다. – duffymo

3

bool을 굴리는 데 가장 큰 문제는 bool을 인식하는 템플릿 사양이 BOOL을 인식하지 못하고 기본 경로로 이동한다는 것입니다. 특히 vector<bool>은 벡터 표시에 비트를 패킹하여 공간을 절약하기 위해 다른 코드 기반을 사용합니다. vector<BOOL>을 사용하면 대략 8 배 더 큰 표현이됩니다. BOOL 이후

+0

그래서 그것을 포팅하는 가장 좋은 방법은 무엇입니까? – user1417815

+0

@ user1417815'bool'을 사용할 수있는 플랫폼에서'typedef BOOL bool'을 사용하고 BOOL/True/False를 사용하는 코드와의 호환성을 위해'static const BOOL False = false'와'static const BOOL True = true'를 추가합니다 . – dasblinkenlight