728x90
반응형
kernel driver code 를 보다 오랫만에 보는 문법이 반가워 정리해본다.
제목 그대로 switch-case 에서 fallthough를 지정하는 부분인데, 이전에는 무쓸모라고 막연히 생각하였다(그냥 break를 안쓰면 되니까..)
근래에 들어서는 code review 기반에서 괜찮은 attribute 사용방법으로 생각되었다.
switch-case 에서 break missing 이 아닌 의도한 코드임을 알려줄 수 있으니,다른 사람이 쉽게 인지할 수 있는 문법으로 사용가능하겠구나 정도...
__attribute__((fallthrough)); // GNU C
[[fallthrough]]; // C17,C23
[[clang::fallthrough]]; // clang
#include <stdbool.h>
void g(void) {}
void h(void) {}
void i(void) {}
void f(int n) {
switch (n) {
case 1:
case 2:
g();
printf("?????? \n");
__attribute__((fallthrough)); // 다음 case 까지 코드가 수행되도록
// falthrough 를 걸어 준다.
case 3:
h();
printf("!!!! \n"); // 당연히 여기까지 수행
break;
case 4:
if(n < 3) {
i();
} else {
return;
}
break;
default:
break;
}
}
int main(void) {
f(2);
}
실행 결과는 아래와 같다.
??????
!!!!
kernel driver 코드에서는 아래와 같이 사용, fallthough 를 별도의 attribute 등의 지정 없이 그냥 써주면 된다.
void g(void) {}
void h(void) {}
void i(void) {}
void f(int n) {
switch (n) {
case 1:
case 2:
g();
printf("?????? \n");
fallthrough; // 다음 case 까지 코드가 수행되도록
// falthrough 를 걸어 준다.
case 3:
h();
printf("!!!! \n"); // 당연히 여기까지 수행
break;
case 4:
if(n < 3) {
i();
} else {
return;
}
break;
default:
break;
}
}
728x90
반응형
댓글