(Я знаю, что большинство людей собирается сказать, что это ужасно).C Макросы переключателя/корпуса, несколько случаев
Я написал следующие макросы легко писать Переключатели используя строки вместо если/иначе, если/иначе:
#define str_switch(value) \
do { \
const char * __strswitchptr__ = (value); \
if(0) \
#define str_case(test) \
} if(strcmp(__strswitchptr__, (test)) == 0) { \
#define str_default \
} else { \
#define str_switchend \
} while(0); \
Что я использую этот путь:
char * sVal = "D";
str_switch(sVal)
{
str_case("A")
printf("Case A");
break;
str_case("B")
printf("Case B");
break;
str_case("C")
printf("Case C");
break;
str_default
printf("Error");
}
str_switchend
Но я могу» t выяснить, как я могу изменить его, чтобы я мог использовать несколько случаев:
char * sVal = "D";
str_switch(sVal)
{
str_case("A")
printf("Case A");
break;
str_case("B")
printf("Case B");
break;
str_case("C")
str_case("D")
str_case("E")
printf("Case C");
break;
str_default
printf("Error");
}
str_switchend
Любая идея? Спасибо :-)
потому, что переключатель делает только целочисленные сравнения –
Насколько я знаю вы не можете сравнивать строки с помощью C-переключателя. – Virus721
@ OliverMatthews Ohh ..., ну вы могли бы сделать функцию, которая выплевывала целые числа. – this