2011-05-12 2 views
0

장비의 모델 번호를 정의하는 매크로가 있습니다. 그것을 문자열과 비교하는 방법을 결정하는 데 문제가 있습니다. 여기C++ 전 처리기 지시문

#define FTP_MODEL_NUM CT1030 

내가 아무리 내 매크로 그것을 컴파일 한 가치를 어떤 조건 모델 번호에 따라 코드 섹션을 컴파일하지 않으려는하지만 다음과 같이 고객의 특정 헤더에서

내 매크로를 정의 어쨌든 :

#if FTP_MODEL_NUM == CT1031 
    QMessageBox * lolers=new QMessageBox; 
    lolers->setWindowTitle(tr("title")); 
    lolers->setText(tr("this is test")); 
    lolers->show(); 
#endif 

무엇이 누락 되었습니까? == 연산자를 사용할 때 절대적으로 다른 매크로와 비교해야합니까? 나는 리눅스에서 Qt를 사용하고있다.

답변

4

C++의 전 처리기가 C99와 동일한 방식으로 작동한다고 가정 할 때 수행하려는 작업은 작동하지 않습니다. FTP_MODEL_NUM == CT1031이 예를 들어 CT1030 == CT1031으로 확장 된 후 표현식에 남아있는 식별자는 모두 0으로 대체되어 0 == 0이되며, 항상 true입니다. 귀하가하려는 일을 수행하는 표준 방법은 모델 번호 (예 : #define CT1030)와 동일한 이름의 매크로를 정의한 다음 #ifdef CT1031으로 테스트를 구현하는 것입니다.

+0

예요. –

2

매크로를 어휘 적으로 비교할 수 없습니다. 수치 적으로 만. 숫자가있는 두 번째 매크로를 정의하고이를 사용하십시오.

+0

옙 그게 –