测试函数时出现未知的解析错误

时间:2016-08-23 01:34:27

标签: c parsing parse-error

我有下面的函数似乎应该正常运行,但是当通过测试程序运行程序时,我得到错误:解析错误:[int xSwapped =((255<< nShift)|( 255<< mShift));]和 未声明的变量`xSwapped':[return(~xSwapped& x)| nMask | mmask指定;]

int dl15(int x, int n, int m){
        // calculates shifts, create mask to shift, combine result
        // get number of bytes needed to shift, multiplying by 8
        // get Masks by shifting 0xff and shift amount
        // shift bits to required position
        // combine results

        int nShift = n<< 3;
        int mShift = m<< 3;

        int nMask = x & (255 << nShift);
        int mMask = x & (255 << mShift);
        nMask = 255 & (nMask >> nShift);
        mMask = 255 & (mMask >> mShift);
        nMask = nMask << mShift;
        mMask = mMask << nShift;

        int xSwapped = ((255 << nShift) | (255 << mShift));

        return (~xSwapped & x) | nMask | mMask;

}

不确定我遗失了什么,谢谢。

1 个答案:

答案 0 :(得分:4)

看起来您正在使用C编译器设置为旧的C标准。在C99之前,您无法在声明之前放置可执行语句。

您可以通过将xSwapped的声明移到顶部来解决此问题:

int nShift = n<< 3;
int mShift = m<< 3;

int nMask = x & (255 << nShift);
int mMask = x & (255 << mShift);
int xSwapped;                                   // Declaration
nMask = 255 & (nMask >> nShift);
mMask = 255 & (mMask >> mShift);
nMask = nMask << mShift;
mMask = mMask << nShift;

xSwapped = ((255 << nShift) | (255 << mShift)); // Assignment

return (~xSwapped & x) | nMask | mMask;