컴파일러 경고(수준 4) C4127
조건식이 상수입니다.
설명
if
문 또는 while
루프의 제어 식이 상수로 계산됩니다. Visual Studio 2015 업데이트 3부터 일반적인 idiomatic 사용으로 인해 1과 같은 사소한 상수는 true
식에서 작업의 결과가 아닌 한 경고를 트리거하지 않습니다.
루프가 중간에 종료되므로 루프의 while
제어 식이 상수인 경우 루프를 while
루프로 for
바꾸는 것이 좋습니다. 루프의 초기화, 종료 테스트 및 루프 증가 for
는 생략할 수 있으며, 이로 인해 루프가 무한 while(1)
하게 되고 명령문 본문에서 루프를 for
종료할 수 있습니다.
예시
다음 샘플에서는 C4127이 생성되는 두 가지 방법을 보여 하며 경고를 방지하기 위해 for 루프를 사용하는 방법을 보여줍니다.
// C4127.cpp
// compile with: /W4
#include <stdio.h>
int main() {
if (true) {} // OK in VS2015 update 3 and later
if (1 == 1) {} // C4127
while (42) { break; } // C4127
// OK
for ( ; ; ) {
printf("test\n");
break;
}
}
조건식에서 컴파일 시간 상수가 사용되는 경우에도 이 경고를 생성할 수 있습니다.
#include <string>
using namespace std;
template<size_t S, class T>
void MyFunc()
{
if (sizeof(T) >= S) // C4127. "Consider using 'if constexpr' statement instead"
{
}
}
class Foo
{
int i;
string s;
};
int main()
{
Foo f;
MyFunc<4, Foo>();
}