[질문] if~else if의 depth와 switch의 case 갯수

clublaw의 이미지

QNA보다는 이곳이 더 어울릴것 같아서
질문이지만 이곳에 올렸습니다.

if (~)
else if (~)
else if (~)
.
.
.
else if (~)

이렇게 윈도우 VC++ 6.0에서 컴파일하니 255개까지 되었던걸로 기억합니다.
256개부터 컴파일 에러가 뜬것 같군요.

그래서 졸업식날(저 이번에 졸업했어요) 후배 연구실에서
문득 이런생각이 들더군요.
"switch에는 몇개의 case가 가능할까?"
그래서 테스트 해봤는데요.

int i;
switch(i)
case 1....32766

이렇게 테스트해보니 컴파일 되더군요. -_-; 시간은 쪼금 걸렸습니다.
그래서 32767부터는 에러가 날거라 예상했는데
32768,32769도 되더군요.
그래서 -32768 ~ 32767이 int의 범위라서 case를 두배로
늘려서 해보자고 case 1: ; ~ case 65536: ; 까지 엑셀에서 만들어서
ctrl+c & ctrl+v 할려고 했는데 여기서 뻗어버리더군요. ㅎㅎ
그래서 두배의 경우는 해보지 않았습니다.

[질문1]혹 switch에 case가 몇개까지 가능한지 아시는분 계신가요?
(자신의 PC가 성능이 좋다면 한번 도전을...;;;)

주워들은 이야기로는 switch가 내부적으로는 goto문과 같이 동작한다고 들었습니다.
[질문2]switch와 유사한 기능으로 보다 더 빠른 명령어가 있을까요?

이상 초보의 엉뚱 생뚱 맞은 질문이었습니다.

pynoos의 이미지

표준에서는 정의하지 않고, 아마 구현에 따라 다를 것으로 예상되는 군요.

cinsk의 이미지

한 translation unit에서 적어도 제공해야될 limit들이 표준에 있긴 합니다.

몇 가지 적어보면...

  • 127 nesting levels of blocks
  • 63 nesting levels of conditional inclusion
  • 63 nesting levels of parenthesized expressions within a full expression
  • 127 arguments in one function call
  • 127 parameters in one macro definition
  • 4095 characters in a logical source line
  • 15 nesting leves for #include files
  • 1023 case labels for a switch statements (excluding those for any nested switch statements)

따라서 C 표준을 준수하는 컴파일러라면 적어도 1023개의 case label을 만들 수 있지만... 가능한 이러한 것은 피하도록 노력해야 합니다.

[/]