2016-08-28 2 views
-5

아마도 같은 질문이 있었지만 그것을 공식화하는 방법을 모르겠습니다.else statement formulation

int x = 0; 
if(someCondition) 
{ 
    x = 1; 
} 

그리고

int x; 
if(someCondition) 
{ 
    x = 1; 
} 
else 
{ 
    x = 0; 
} 
이 같은
+0

두 가지 모두 동일한 작업을 수행합니다. – DimChtz

+0

기술적으로 차이가 없으며 항상 변수 초기화 (C# IIRC에서는 필요하지 않음)를 선호합니다. –

+0

결과는 동일하지만 성능이나 그 밖의 다른 점이 있습니까? –

답변

4

리틀 질문은 godbolt 온라인 컴파일러에서 테스트하기 매우 쉽게되어 있습니다 : 어셈블러 결과

int test1(bool someCondition) 
{ 
    int x = 0; 
    if(someCondition) 
    { 
    x = 1; 
    } 
    return x; 
} 

int test2(bool someCondition) 
{ 
    int x; 
    if(someCondition) 
    { 
    x = 1; 
    } 
    else 
    { 
    x = 0; 
    } 
    return x; 
} 

int test3(bool someCondition) 
{ 
    return someCondition ? 1 : 0; 
} 

int test4(bool someCondition) 
{ 
    return int(someCondition); 
} 

:

그것은의 차이인가
test1(bool): 
     movzx eax, dil 
     ret 
test2(bool): 
     movzx eax, dil 
     ret 

test3(bool): 
     movzx eax, dil 
     ret 
test4(bool): 
     movzx eax, dil 
     ret 

그래서 현실에서는 없습니다. 그것은 단지 스타일의 문제입니다.

+1

@ 테스트 전에 변수를 0으로 설정하는 암시 적 else가 있습니다. –

+0

관심있는 사람들을위한 godbolt 링크 : https://gcc.godbolt.org/ – primodemus

0

컴파일러는 완전히 동일하다는 것을 이해하고 똑같은 코드를 생성합니다.

차이점은 가독성과 유지 보수성입니다. 더 큰 프로그램의 일부로 두 버전 중 하나가있는 경우 수행 된 작업의 논리적 개념을 반영해야합니다.