컴파일러 경고(수준 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인 메서드의 결과는 명명되지 않은 로컬 클래스 변수의 생성자에 인수로 전달됩니다. 호출은 지역 변수의 이름을 지정하거나 적절한 포인터-멤버 연산자와 함께 개체 인스턴스를 사용하여 메서드 호출의 접두사를 지정하여 명확하게 구분할 수 있습니다.