2016-08-23 4 views
3

テストプログラムでプログラムを実行しているときに、以下の関数が動作するように見える以下の関数がありますが、エラーが発生します。解析エラー:[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; 

} 

何か不足していることはありません、ありがとうございます。

+0

をあなたはMSVC(もしくはC89コンパイラ)を使用していますか? – BLUEPIXY

+0

@BLUEPIXYいいえ、Windowsではなく、MIT CILKグループのANSI Cコンパイラを使用しています – Silverfin

+0

GCCを使用する場合は、 '-std = c99'オプションを使用してください。またはその行が 'int mShift = m << 3;の後に移動する – BLUEPIXY

答えて

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; 
+0

これはそれを解決し、良いキャッチ – Silverfin