2013-07-18 5 views
0

구문의 올바른 사용에 관한 간단한 질문이 있습니다. 기본적으로이 두 if 문을 하나의 if 문으로 요약하려고합니다.&& 연산자와 2 개의 변수를 사용하는 if 문에서 구문의 올바른 사용

if (sc.LastCallToFunction) { 
    if (p_LowRectanglesList || p_HighrectangleList != NULL) { 
     free(p_LowRectanglesList && p_HighRectanglesList); 
     sc.PersistVars->i1 && sc.PersistVars->i2 = 0; 
    } 
    return; 

또는 컴파일러가이를 받아들이지 않을 것입니다 /가요 내 논리에 결함이 :

if (sc.LastCallToFunction) { 
    if (p_LowRectanglesList != NULL) { 
     free(p_LowRectanglesList); 
     sc.PersistVars->i1 = 0; 
    } 
    if (p_HighRectanglesList != NULL) { 
     free(p_HighRectanglesList); 
     sc.PersistVars->i2 = 0; 
    } 
    return; 

는이 같은 재 작성 올바른 구문겠습니까?

+2

당신의 논리는 매우 결함이 놓아야합니다. – juanchopanza

+1

매우 매우 결함이 있습니다. –

+0

C++에서는 free()를 호출해서는 안됩니다. 당신은 매우 드물게 삭제를 사용해야합니다. "RAII"를 찾으십시오 - 모든 것이 더 나아질 것입니다. –

답변

0

이 논리적으로 첫 번째 포인터를 NULL로 번째 차이점 포인터의 비교와 (그것뿐만 참 또는 거짓 취급) OR 연산 그것은 당신이

if (p_LowRectanglesList || p_HighrectangleList != NULL) 

준 방법을 수행 할 수 없습니다

free(p_LowRectanglesList && p_HighRectanglesList); 

이 논리적으로는 & &입니다. 포인터를 함께 모은 다음 해당 연산의 결과를 비우려고합니다. 즉, 당신은 "true"또는 "false"는

sc.PersistVars->i1 && sc.PersistVars->i2 = 0; 

이 논리적으로의 ands 참 또는 거짓을 초래할 후 0을 할당 할려고합니다 함께 두 가지, ..... 아무튼 확보하기 위해 노력하고있다 전혀 이해가되지 않습니다.

또한, 원래 코드에서 .... 무료 후에는 p_LowRectanglesList=NULL;

+0

내가 이것을 재 작성하면 어떻게 되겠습니까? if ((p_LowRectanglesList! = NULL) || (p_HighRectanglesList! = NULL)) 내 문제의 합법적 인 구문 솔루션이 될까요? – Orbital

+0

은 if 문에 대한 올바른 구문을 제공하지만 도움이되지는 않습니다 ... 각 포인터를 독립적으로 검사하고 각 포인터를 따로 따로 해제해야합니다. 그 if 문이 그 두 포인터 중 적어도 하나가 널이 아님을 알려줍니다. 그다지 사용하지 않습니다. 널 포인터가 null이 아닌지 확인하려면 각 포인터를 검사해야합니다. –

+0

이 문제는 C#에서 &를 사용하면 둘 다 검사하고 &&를 사용하면 첫 번째 조건이 충족되면 검사를 중지합니다. 저는이 경우에 C++에 적합한 구문을 찾는 데 정말 어려움을 겪고 있습니다. 포인터 중 하나가 null이 아니면 나머지는 실행되기 때문에 프로그램의 목적에 맞게이 구문은 충분해야합니다. 그게 아니라 내가 정말로 게시 한 두 문장을 결합해야합니다, 그게 내가 더 우아한 방법을 찾고 있는데, 나는 구문에 붙어있다. 모든 제안은 cplusplus.com – Orbital

관련 문제