나는 오늘이 문제에 대해 조사한 결과,이 모든 것이 모두 C4353을 생성하는 유효한 진술임을 알게되었습니다. 내 유일한 추측은 C에서 멍청한 짓을하는 오래된 방법이라는 것입니다. 왜 이것이 오류가 아닌지. 언제 이것을 유용하게 사용할 수 있을까요?vs2010 C4353 왜이게 오류가 아닐까요
int main()
{
nullptr();
0();
(1 == 2)();
return 0;
}
나는 오늘이 문제에 대해 조사한 결과,이 모든 것이 모두 C4353을 생성하는 유효한 진술임을 알게되었습니다. 내 유일한 추측은 C에서 멍청한 짓을하는 오래된 방법이라는 것입니다. 왜 이것이 오류가 아닌지. 언제 이것을 유용하게 사용할 수 있을까요?vs2010 C4353 왜이게 오류가 아닐까요
int main()
{
nullptr();
0();
(1 == 2)();
return 0;
}
상수 0을 함수 식으로 사용하면 Microsoft에만 해당되는 확장입니다. 그들은 이유를 알기 때문에 이것을 구체적으로 구현했는데, 오류로 취급하는 것이 왜 이치에 맞지 않는지 설명합니다. 하지만 표준이 아니기 때문에 컴파일러는 경고를 내 보냅니다.
__noop()을 사용하는 대신 사용할 수 있습니다.
이 모든 :
nullptr();
0();
(1 == 2)();
(그들은 아무것도하지 의미)에는 조합 문 없다.
btw 나는 경고를 무시하지 않기를 바랍니다. 대부분의 경우 모든 경고를 수정하는 것이 좋습니다.
나는 프로젝트를 수행하지 않는다. – rerun
으로는 C4353 warning page에와 __noop
intrinsic documentation에 설명 된 함수 표현식으로 0
의 사용은 함수 호출을 무시하지만 여전히 (부작용) 인수를 평가하는 코드를 생성하려면 Microsoft C++ 컴파일러에 지시합니다.
#if DEBUG
#define PRINT printf_s
#else
#define PRINT __noop
#endif
int main() {
PRINT("\nhello\n");
}
MSDN page 그 경고에 대한 충분한 설명하고 있습니다
주어진 예
는DEBUG
처리기 심볼의 값에 따라,
__noop
또는 인쇄 기능에
#defined
중 하나를 얻을 추적 매크로입니다 동기 부여 예제 :
// C4353.cpp
// compile with: /W1
void MyPrintf(void){};
#define X 0
#if X
#define DBPRINT MyPrint
#else
#define DBPRINT 0 // C4353 expected
#endif
int main(){
DBPRINT();
}
알 수 있듯이 고풍 매크로 사용을 지원하는 것입니다.
C4353이란 무엇입니까 ?? –
GCC-4.3.4는 [세 가지 모두에 대한 오류] (http://www.ideone.com/sy9cd)를 발행합니다. 이는 VC2010이 컴파일러 확장으로 지원한다는 것을 알 수 있습니다. –
"이 모든 것이 모두 유효한 진술"이라는 의미는 무엇입니까? 적어도 하나 이상의 컴파일러,이 코드를 컴파일하는 Visual C++ 10.0 이외의 알고 있습니다. 추신. vs2010은 컴파일러의 이름이 아닙니다. "Vim에서이 코드를 컴파일합니다."... :-) – mloskot