문제

컴파일하려고합니다 lightzpng 레벨 4에 대한 경고로 나는이 경고에 합당하지 않은 라인에서 많은 C4127을 얻습니다. An example:

#define MAX_BITS 15
int values_per_bitlen[ MAX_BITS + 1 ];
for ( int i = 0; i <= MAX_BITS; ++i )    // C4127 is here
    values_per_bitlen[ i ] = 0;

#Pragma 이외의 경고를 피하기 위해이 코드를 어떻게 변경할 수 있습니까?

도움이 되었습니까?

해결책

lightz.cpp 상단에 코드가 있습니다.

#define for if (false) {} else for

즉, 실제 진술은 다음과 같습니다.

#define for if (false) {} else for ( int i = 0; i <= MAX_BITS; ++i )

그렇기 때문에 일정한 표현식 오류가 발생합니다 ( false, i <= MAX_BITS 생각했던 데로).

파일에서 해당 줄을 주석하거나 삭제하기 만하면 (실제로 왜 그렇게할지 알 수는 없습니다).

다른 팁

예, 그게 이상합니다. 정말입니다 ~ 아니다 그 이후로 일정한 표현 i 루프의 변경. 따라서 이것은 VS2005에서 문제가 될 것 같습니다. 가치가있는 것에 대해 VS2008도 똑같은 일을합니다.

이상하게도 프로젝트 단지 이것으로 불평하지 않으므로 Microsoft의 경고 생성 코드에서 이상한 에지 문제 일 수 있습니다.

#define MAX_BITS 15
int values_per_bitlen[ MAX_BITS + 1 ];
int main(int argc, char* argv[]) {
    for ( int i = 0; i <= MAX_BITS; ++i )
        values_per_bitlen[ i ] = 0;
    return 0;
}

그러나 실제로 질문을하지 않았습니다. 당신이 알고 싶어하는 것은 무엇입니까, 또는 우리가하고 싶은가?

업데이트:

실제 원인에 대한 "Windows 프로그래머"의 답변을 참조하십시오. "#define for if (false) {} else for" Lightz.cpp의 상단에서 문제가 발생합니다.

VS2005에서 테스트했으며 경고 레벨 4에서도 경고가 나타나지 않습니다.

따라야 할 간단한 절차 :

-새 콘솔 앱을 만들고 위의 코드 만 배치하고 경고가 다시 나타나는지 확인하십시오.

-그렇지 않은 경우 프로젝트 설정의 차이점을 확인하십시오.

-그렇다면 최적화 설정으로 인해 원인이 될 수 있습니다.

Charles Nicholson에 따르면, Visual Studio 2005는 "do...while(0)"트릭 :

#define MULTI_LINE_MACRO \
    do { \
        doSomething(); \
        doSomethingElse(); \
    } while(0)

당신이 절대적으로해야한다면, 당신은 그것을 사용할 수 있습니다 __pragma 특정 코드 조각 주변의 경고를 선택적으로 비활성화하는 지침.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top