C,在if语句中测试多个值的简单方法

时间:2016-07-31 06:21:47

标签: c

我必须解析wav文件(plain C)并验证一些参数以传递下一个函数。其中一个是采样率,在if语句中使用位置进行多次测试并不是很短:

#define     WAV_ALLOWED_SAMPLE_RATE         (48000)

    if(wavFile.Header.SampleRate != WAV_ALLOWED_SAMPLE_RATE)    /* Sample Rate */
                        return WAV_HDR_CHUNK_FMT_INVALID_SAMPLE_RATE;

有一种简单的方法可以测试我想在设计时预先定义的多个值吗?像这样:

#define     WAV_ALLOWED_SAMPLE_RATE         (11025 || 22050 || 44100 || 48000)

可能是2,3或4个值,具体取决于项目需求。

提前致谢,

2 个答案:

答案 0 :(得分:2)

Wave Format Standard中,采样率是一个32位整数。因此,如果您将其读入int,则可以轻松使用if语句和整数相等比较。最简单的陈述,基于您的输入:

int R = wavFile.Header.SampleRate;

if ( (R != 48000) && (R != 44100) && (R != 22050) && (R != 11025) )
    return WAV_HDR_CHUNK_FMT_INVALID_SAMPLE_RATE;

答案 1 :(得分:0)

#define     WAV_ALLOWED_SAMPLE_RATE         (11025 || 22050 || 44100 || 48000)


    if(wavFile.Header.SampleRate != WAV_ALLOWED_SAMPLE_RATE)    /* Sample Rate */
                        return WAV_HDR_CHUNK_FMT_INVALID_SAMPLE_RATE;

此代码不会按您的意愿运行。值(11025 || 22050 || 44100 || 48000)将被解释为1,从而伪造if条件......

您可以编写一个简单的函数来检查所有4个值,或者在代码中按原样执行