아까 문자열 switch case 만들 때 발견한 버그(?)인데 이게 없으면
아까처럼 구현하기가 힘듦
switch(1)
{
case 0:
if(0){} else {case 1:{}}
default:
break;
}
====================================
버그 활용해서 맹근것
====================================
int a = 0;
for (int i = 0; i < 2; i++)
{
SWITCH("Age")
{
CASE(std::wstring(L"Age")):
CASE(L"Age"):
a = 50;
break;
CASE_NULL:
break;
CASE("Name"):
a = 100;
break;
CASE(std::string("Age")):
a += 200;
CASE("Age1"):
DEFAULT:
a += 300;
continue;
CASE("Age"):
break;
} END_SWITCH;
}
printf("결과: %d ", a);
결과: 1000
====================================
버그를 쓸 수 없을 경우의 구현
====================================
SWITCH("Age")
CASE(std::wstring(L"Age"))
CASE(L"Age")
a = 50;
break;
CASE_NULL
break;
CASE("Name")
a = 100;
break;
CASE(std::string("Age"))
a += 200;
CASE("Age1")
DEFAULT
a += 300;
continue;
CASE("Age")
break;
END_SWITCH;
버그 없어도 되긴 하는데 모양이 나쁨
그래서 나는 저 버그가 꼭 필요함
적용 가능한 툴셋 버전:(테스트 완료한 것들)
Clang 3.7 with Microsoft CodeGen(v140_clang_3_7)
v140
v140_xp
v120
v120_xp
v100
v100_xp
g++
gcc
버그라서 이상하게 동작하지 않을까 싶은데 아직까지는 별 문제 없음.
좀더 혼자 많이 써보다가 github에 공개할 예정임
머라 오류라는건데
오류가 아니고 사소한 버그이거나 트릭으로 생각해야함
아니 글 첨봐서 그러는데 결과가 어덯게 나오길래 오류란건데
결과는 정상이라고 구문이 잘못되었는데도 컴파일이 정상적으로 되니까 버그라 한거고
case의 작동범위 말하는건가? 여기다가 scope라는 말을 붙여도 되는지 몰겠는데 암튼 scope관련한거 찾아보면 나오지 않을까
예시를 했으면 결과값을 올려라.. 그리고 문자열을 스윗케이스 로 비교해도되냐? 안써봐서 모르겟는데 안될것같은데. 첫번째 예시 case 1 쪽 실행되면 컴파일러 오류가 맞긴한것같은데..
case 1 쪽이 실행됨 그리고 실행되는냐 안되는냐가 문제가 아니고 컴파일 된다는거 자체가 버그인데 나는 착한 버그라고 생각하고 활용중
맞네