다음은 뭔가 이상하지만 c 문법상 switch 문 사용에 위배되지 않은 문법입니다.
역시 그렇기에 컴파일도 잘 되네요.
#include <stdio.h>
#include <stdlib.h>
int main(int argNum, char* argStr[])
{
int a = 10;
int type;
if(argNum == 2)
{
type = atoi(argStr[1]);
if(type < 1 || type > 2) type = 1;
}
switch(type)
{
case 1:
if(type == 1)
{
int a = 15;
int b = 20;
printf("a[%d] b[%d]\r\n", a, b);
case 2:
printf("hello! a[%d] b[%d]\r\n", a, b);
}
}
printf("a[%d]\r\n", a);
return 0;
}
위의 코드를
gcc 3.2 에서 컴파일해서 실행한 결과가
Quote:
./a.out 1
a[15] b[20]
hello! a[15] b[20]
a[15]
Quote:
./a.out 2
hello! a[134513258] b[-1073749352]
a[15]
이런 코드는 깔끔하게 처리가 안된는 군요.
이런 부분을 runtime 때 적당히 보정하는 작업이 있다면
switch 문이 if else 보다 느려지겠지만 이런게 없다면
딱히 switch 문이 느릴 이유가 없을 것 같긴 하군요.
switch() instead of if...else...
For large decisions involving if...else...else..., like this:
if( val == 1)
dostuff1();
else if (val == 2)
dostuff2();
else if (val == 3)
dostuff3();
it may be faster to use a switch:
switch( val )
{
case 1: dostuff1(); break;
case 2: dostuff2(); break;
case 3: dostuff3(); break;
}
In the if() statement, if the last case is required
쓸 수 있다면 당연히 switch 문 쪽입니다. 여러가지 조건에 따라 달
쓸 수 있다면 당연히 switch 문 쪽입니다. 여러가지 조건에 따라 달라지겠지만, switch 문은 if ... else if ... else if 가 아니라 테이블을 만들어 해당위치로 바로 이동하도록 최적화될 수 있습니다.
일부 코드에서의 부분 최적화가 전체 퍼포먼스에 미치는 영향은 극히 미미합
일부 코드에서의 부분 최적화가 전체 퍼포먼스에 미치는 영향은 극히 미미합니다.
알고리즘과 자료구조, 아키텍쳐 측면의 결정에서 효율적인 아키텍쳐를 선택하는 것이 오히려 전체 퍼포먼스에 critical 한 영향을 미칩니다.
----
LUX ET VERITAS | Just for Fun!
컴파일러가 별도의 최적화를 하지 않는 상태에서는if else 가 sw
컴파일러가 별도의 최적화를 하지 않는 상태에서는
if else 가 switch 보다 빠르다고 합니다.
switch 의 문법 특성을 보면 if else 보다 느릴 수 밖에 없는데요
가령
case a:
break;
case b:
break;
만 사용하는게 아니고
case a:
case b:
break;
이런게 가능해서 이걸 구현하다보면 if else 보다 느려지는 것 같더군요.
하지만 case 문 뒤에 오는 조건이 규칙성이 있다던지 하면 컴파일러가
switch 에 대한 최적화를 해서 if else 보다 더 빠를 수도 있다고 하더군요
[quote="devilhero"]case a:case b:bre
이 부분이 이해가 안되는데요?
https://nicesj.com
https://blog.nicesj.com
[quote="devilhero"]컴파일러가 별도의 최적화를 하지 않는
switch 를 사용할수 있다면 사용하는것이 훨씬 효율적입니다.
----------------------------------------------------------------------------
참고될만한 스레드입니다.http://bbs.kldp.org/vie
참고될만한 스레드입니다.
http://bbs.kldp.org/viewtopic.php?t=39060&highlight=switch
Orion Project : http://orionids.org
다음은 뭔가 이상하지만 c 문법상 switch 문 사용에 위배되지 않은
다음은 뭔가 이상하지만 c 문법상 switch 문 사용에 위배되지 않은 문법입니다.
역시 그렇기에 컴파일도 잘 되네요.
위의 코드를
gcc 3.2 에서 컴파일해서 실행한 결과가
이런 코드는 깔끔하게 처리가 안된는 군요.
이런 부분을 runtime 때 적당히 보정하는 작업이 있다면
switch 문이 if else 보다 느려지겠지만 이런게 없다면
딱히 switch 문이 느릴 이유가 없을 것 같긴 하군요.
위와 같은 코드에서는 case 2 일 경우는 어떻게 작동하는게
올바른 작동일까요?
[quote]switch() instead of if...else...
Ref: http://www.abarnett.demon.co.uk/tutorial.html#SWITCH
switch()이게 더 나을듯 하다는 내용입니다.
참고 하시길.
<어떠한 역경에도 굴하지 않는 '하양 지훈'>[/url]
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
어는쪽이 좀더 효과적일지는.gcc -S xxx.c 하셔셔, 어셈블러
어는쪽이 좀더 효과적일지는.
gcc -S xxx.c 하셔셔, 어셈블러 코드를 비교 해 보시는 것이 좋을 듯....
>>>행복한 웃음<<<
보통 if~ else if 문의 개수가 2개를 초과하는 경우
switch 문을 권장합니다.
switch 문 사용시에는 가급적 case X : 문에서 X 에 오는 int형 type 도 순서대로 쓰는게 보기에도 좋고 성능도 좋습니다.
With Everlasting Passion about new Tech. and Information!
댓글 달기