다음을 통해 공유


컴파일러 경고(수준 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>();
}