我知道大多数人都会说这很糟糕。
我编写了以下宏,以便使用字符串而不是if/else if/else轻松编写开关:
#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
但我不知道如何修改它,以便我可以使用多个案例:
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
有任何想法吗?谢谢 :-)
__strswitchptr__
是被标准保留的。你可以使用_strswitchptr
,它是保留给文件作用域标识符的,这样你就可以确保它不会在头文件中被意外地替换为宏或其他问题。 - Shahbaz