다음 enum 및 switch 문을 고려하십시오.
typedef enum {
MaskValueUno,
MaskValueDos
} testingMask;
void myFunction(testingMask theMask) {
switch (theMask) {
case MaskValueUno: {}// deal with it
case MaskValueDos: {}// deal with it
default: {} //deal with an unexpected or uninitialized value
}
};
나는 Objective-C 프로그래머이지만 더 많은 사람들을 위해 이것을 순수한 C로 작성했습니다.
-Weverything이있는 Clang / LLVM 4.1은 기본 줄에 경고합니다.
모든 열거 값을 포함하는 스위치의 기본 레이블
이제 이것이 왜 존재하는지 알 수 있습니다. 완벽한 세계에서 인수에 입력하는 유일한 값 theMask
은 열거 형에있을 것이므로 기본값이 필요하지 않습니다. 그러나 일부 해킹이 발생하여 초기화되지 않은 정수를 내 아름다운 기능에 던지면 어떻게됩니까? 내 기능은 라이브러리의 드롭으로 제공되며 거기에 들어갈 수있는 것을 제어 할 수 없습니다. 사용 default
은 이것을 처리하는 매우 깔끔한 방법입니다.
왜 LLVM 신들은이 행동이 그들의 지옥의 장치에 맞지 않다고 생각합니까? 인수를 확인하기 위해 if 문으로이 작업을 수행해야합니까?
-Weverything
유용 할 수 있지만 코드를 처리하기에는 코드를 너무 많이 변경하는 데주의하십시오. 이러한 경고 중 일부는 무가치 할뿐만 아니라 비생산적이며 가장 꺼져 있습니다. (실제로 이것이 유스 케이스입니다 -Weverything
. 시작하여 이해가되지 않는 것을 끄십시오.)
"Pro tip: Try setting the -Weverything flag and checking the “Treat Warnings as Errors” box your build settings. This turns on Hard Mode in Xcode."
.