수많은 if~else if를 간단히 처리하는 방법이 있나요?
글쓴이: ckebabo / 작성시간: 토, 2006/01/07 - 6:42오후
if(!strcmp(buf, "aaa")) { aaa = value; } else if(!strcmp(buf, "bbb")) { bbb = value; } else if(!strcmp(buf, "ccc")) { ccc = value; } else if(!strcmp(buf, "ddd")) { ddd = value; } else if(!strcmp(buf, "eee")) { eee = value; } else if(!strcmp(buf, "fff")) { fff = value; } else if(!strcmp(buf, "ggg")) { ggg = value; }
와 같을경우 간단히 하는 방법이 없을까요?
Forums:
Re: 수많은 if~else if를 간단히 처리하는 방법이 있나요?
정도면 되지 않을까요?
"aaa" 나 "bbb" 처럼, 문자열을 변수 이름으로 사용하고 싶으시다면 ... 그건 잘 모르겠군요. C에서는 일명 꽁수가 아니면 '안된다' 라고 할 수 있을 것 같은데요. 혹 간단히(중요!) 구현할 수 있다면 알고 싶군요. ... 그런데 별로 기대는 안됩니다. 차라리 디자인을 손보는게 어떨까요?
--
http://www.deisys.net
C를 사용하는데, 힘들군요...아무래도 설계를 바꿔야 할 것 같네요.
C를 사용하는데, 힘들군요...
아무래도 설계를 바꿔야 할 것 같네요.
아...또 얼마나 손봐야되나..
^^;
hash 알고리즘을 이용하시는것도 한 방법이 될거라 봅니다.
^^;
그럼
글자가 모두 3글자씩 되어 있으므로 ('\0'을 포함해 4글자) int가
글자가 모두 3글자씩 되어 있으므로 ('\0'을 포함해 4글자) int가 32bit인 compiler라면
와 같이 사용해서 switch case로 묶으면 될 듯 합니다. case는 endian에도 조심해야 됩니다. 그리고 이렇게 하는 경우에 buf가 32bit align이 되어 있다고 확신할 수 없고 cpu가 32bit data에 대해 misaligned access를 지원하지 않으면 buf를 32bit align되어 있는 memory에 복사해서 비교하는 것이 좋을 것으로 생각됩니다.
Taeho Oh ( ohhara@postech.edu ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Alticast Corp. http://www.alticast.com
C언어 문법에 없는 것은 없습니다. switch도 결국은 if 문과
C언어 문법에 없는 것은 없습니다.
switch도 결국은 if 문과 같습니다.
1000개 정도 된다면 별도의 로직을 구현할 필요는 있습니다.
많이 사용되는 결과값이 자동으로 앞쪽에서 계산되도록
현 상태에서는 가장 가능성 높은 비교 aaa가 프로그램 전체 논리에서
가장 빈번히 비교될 가능성이 많은 경우가 좋겠지요
if문을 어셈블리 코드로 분석해 보면 그 실행 속도문제를 이해 가능할것입니다.
결론은 제일 빈번히 비교되는 것을 제일 앞쪽에 넣는 경우가 가장 이상적입니다.
또한, aaa 이런 상수값 비교 논리를 사전에 define 해서 처리한다면
실제 코딩에서 편리할 수 있지만 결국은 같습니다.
후회없이 살자
Re: 수많은 if~else if를 간단히 처리하는 방법이 있나요?
변수 이름과 문자열이 동일하다면 다음과 같이 조금 더 편하고 코딩 실수를 줄일 수 있는 방법도 있습니다.
Nevermind... :)
Re: 수많은 if~else if를 간단히 처리하는 방법이 있나요?
소스의 가독성을 높히는 것도 좋지만...
문제는 if..else..if..else.......
strcmp( buf, "ggg" )를 N번까지.. ㅡㅡ;
스트링을 선행처리 루틴이나 함수(해시테이블)를 만들어 switch문을 하시는게 가독성도 높히고, 속도면에서도...
그리고, strcmp().. strncmp()가 버퍼오버플로우에...
스트링도 소스에 넣지말고, 약간의 조작을 해서 처리하심이..^^;;
Hello World.
[quote]그리고, strcmp().. strncmp()가 버퍼오버플로
특별히 메모리에 데이터를 적는 작업이 아니기 때문에 버퍼 오버플로우가 발생하지는 않을 것 같습니다.
댓글 달기