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
'programing' 카테고리의 다른 글
Vue v-if에서 비동기 기능을 사용하는 방법은 무엇입니까? (0) | 2022.07.21 |
---|---|
Vue 라우터에서 동작하지 않는 컴포넌트 레이지 (0) | 2022.07.21 |
영구 스토리지에서 저장소 수분을 보충한 후 Vuex getter가 업데이트되지 않음 (0) | 2022.07.21 |
Vuex 디스패치에 의한 비동기/대기 (0) | 2022.07.21 |
VueJ 2.0에서 vee-validate를 사용하는 두 필드 중 하나 이상 필요 (0) | 2022.07.21 |