programing

C 코드의 스위치 케이스에 있는 "..."는 무엇입니까?

procenter 2022. 7. 21. 23:22
반응형

C 코드의 스위치 케이스에 있는 "..."는 무엇입니까?

여기 코드 조각이 있습니다./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];
    }
  }
}

일종의 교환수인가요?왜 "C 프로그래밍 언어"는 그것을 언급하지 않는가?

이거는gcc 케이스 범위라고 불리는 확장 기능에 대해서는, 다음과 같이 설명하고 있습니다.

다음과 같이 단일 케이스 라벨에 연속되는 값의 범위를 지정할 수 있습니다.

case low ... high:

여기서 gcc 확장의 전체 목록을 찾을 수 있습니다.clang도 이 기능을 지원하는 것 같습니다.gcc. 사용방법-pedantic어느 쪽인가에 깃발을 올리다gcc또는clang는 이것이 비표준임을 경고합니다.다음은 예를 제시하겠습니다.

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

Linux 커널에서 많은 gcc 확장자를 사용하고 있는 은 이 문서에서 다루지 않은 확장자 중 하나가 스테이트먼트 표현식입니다.

gcc 컴파일러 확장 기능으로 여러 개의 케이스 스테이트먼트를 한 줄에 결합할 수 있습니다.

이것은 표준 C가 아니기 때문에 휴대할 수 없습니다.이것은 사례 진술을 위해 고안된 줄임말이다.C에서는 일체형만 켤 수 있기 때문에 잘 정의되어 있습니다.

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

대/소문자 '0'...'7': 대/소문자 범위 지정(gcc).

케이스 스테이트먼트의 범위 지정.

...의 주위에 공백을 씁니다.그렇지 않으면 정수값과 함께 사용할 때 구문 분석이 잘못될 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/18853502/what-is-in-switch-case-in-c-code

반응형