활용 - switch 자료형




C 코드의 스위치 케이스에 "..."이 무엇입니까? (3)

case '0'... '7': gcc의 대소 문자 구분 입니다.

case 문에 대한 범위 지정.

... 주위에 공백을 씁니다. 그렇지 않으면 정수 값과 함께 사용할 때 잘못 파싱 될 수 있습니다.

case '0' or case '1' or case '3' and so on case '7':
or case 'b' :
just return buffer[1]; 

다음은 /usr/src/linux-3.10.10-1-ARCH/include/linux/printk.h 에있는 코드입니다.

static inline int printk_get_level(const char *buffer)
{
  if (buffer[0] == KERN_SOH_ASCII && buffer[1]) {
    switch (buffer[1]) {
    case '0' ... '7':
    case 'd':  /* KERN_DEFAULT */
      return buffer[1];
    }
  }
}

그것은 일종의 오퍼레이터인가? 왜 "The C Programming Language"는 그것을 언급하지 않는가?


표준 C가 아니므로 이식 할 수 없습니다. 그것은 사례 진술을 위해 고안된 속기입니다. C에서는 정수형 만 스위치 할 수 있기 때문에 잘 정의되어 있습니다.

표준 C에서는 ... 가변 길이 인수 목록에서만 사용됩니다.


사례 범위 (case ranges ) 라고 불리는 gcc 확장 입니다. 문서에서 설명하는 방법입니다.

다음과 같이 하나의 사례 레이블에 연속적인 값의 범위를 지정할 수 있습니다.

case low ... high:

여기gcc 확장 의 전체 목록을 찾을 수 있습니다. clang이 gcc 와 호환되도록 시도하고 유지하도록 지원하는 것처럼 보입니다. gcc 또는 clang 에서 -pedantic 플래그를 사용하면 이것이 비표준임을 경고합니다. 예를 들면 다음과 같습니다.

warning: range expressions in switch statements are non-standard [-Wpedantic]

리눅스 커널은 gcc 확장을 많이 사용 한다는 점이 흥미 롭습니다. 기사에서 다루지 않은 확장 기능 중 하나는 명령문 표현입니다.







gcc-extensions