다음을 통해 공유


컴파일러 경고(수준 1) C4930

'prototype': 프로토타입 함수가 호출되지 않았습니다. 변수 정의로 사용하려고 한 것은 아닌지 확인하세요.

컴파일러가 사용되지 않는 함수 프로토타입을 검색했습니다. 프로토타입이 변수 선언으로 의도된 경우 열기/닫기 괄호를 제거합니다.

다음 샘플에서는 C4930을 생성합니다.

// C4930.cpp
// compile with: /W1
class Lock {
public:
   int i;
};

void f() {
   Lock theLock();   // C4930
   // try the following line instead
   // Lock theLock;
}

int main() {
}

컴파일러가 함수 프로토타입 선언과 함수 호출을 구분할 수 없는 경우에도 C4930이 발생할 수 있습니다.

다음 샘플에서는 C4930을 생성합니다.

// C4930b.cpp
// compile with: /EHsc /W1

class BooleanException
{
   bool _result;

public:
   BooleanException(bool result)
      : _result(result)
   {
   }

   bool GetResult() const
   {
      return _result;
   }
};

template<class T = BooleanException>
class IfFailedThrow
{
public:
   IfFailedThrow(bool result)
   {
      if (!result)
      {
         throw T(result);
      }
   }
};

class MyClass
{
public:
   bool MyFunc()
   {
      try
      {
         IfFailedThrow<>(MyMethod()); // C4930

         // try one of the following lines instead
         // IfFailedThrow<> ift(MyMethod());
         // IfFailedThrow<>(this->MyMethod());
         // IfFailedThrow<>((*this).MyMethod());

         return true;
      }
      catch (BooleanException e)
      {
         return e.GetResult();
      }
   }

private:
   bool MyMethod()
   {
      return true;
   }
};

int main()
{
   MyClass myClass;
   myClass.MyFunc();
}

위의 샘플에서 인수가 0인 메서드의 결과는 명명되지 않은 로컬 클래스 변수의 생성자에 인수로 전달됩니다. 호출은 지역 변수의 이름을 지정하거나 적절한 포인터-멤버 연산자와 함께 개체 인스턴스를 사용하여 메서드 호출의 접두사를 지정하여 명확하게 구분할 수 있습니다.