我正在写一个库来加载和保存ascii和二进制图像。我为保存位图的4种不同方式定义了一个包含4个不同标志的枚举:
enum jmpr_PNMMode
{
BINARY_PPM, /* Binary Portable Pixmap (P6) */
ASCII_PPM, /* Portable pixmap ASCII (P3) */
BINARY_PGM, /* Portable Graymap binary (P5) */
ASCII_PGM /* Portable Graymap ASCII (P2) */
};
我将这些作为参数传递给save函数:
void jmpr_savePNM(char* filename, jmpr_Image* img, enum jmpr_PNMMode mode)
{
}
现在如何检查得到的枚举的不同实例?它不适用于:
if (strcmp(mode, "ASCII_PPM") != 0)
因为第二个参数在技术上不是char*。
最佳答案
此代码:
enum jmpr_PNMMode
{
BINARY_PPM, /* Binary Portable Pixmap (P6) */
ASCII_PPM, /* Portable pixmap ASCII (P3) */
BINARY_PGM, /* Portable Graymap binary (P5) */
ASCII_PGM /* Portable Graymap ASCII (P2) */
};
将有意义的名称赋给4个整数,其中
BINARY_PPM
为0,后面的每一行将该数字递增1。所以被调用函数中的代码可以使用:
if ( BINARY_PPM == mode )
...
else if( ASCII_PPM == mode )
...
else if( BINARY_PGM == mode )
...
else if( ASCII_PGM == mode )
...
else
{
perror( "invalid mode sent to jmpr_savePNM()" );
exit( EXIT_FAILURE );
}
或者可能正在使用:
switch( mode )
case BINARY_PPM:
...
break;
case ASCII_PPM:
...
break;
case BINARY_PGM:
...
break;
case ASCII_PGM:
...
break;
default:
perror( "invalid mode sent to jmpr_savePNM()" );
exit( EXIT_FAILURE );
break;
} // end switch()
为了代码的清晰性以及易读性和理解性,我将使用
switch()
语句。