7

のCソースコードをコンパイルしているときに、次の警告が表示されますgcc 4.6.1

   warning: variable set but not used [-Wunused-but-set-variable]

私はこのリンクWunusedを参照しましたが、この警告の原因を正確に知ることができました。この警告の原因と、それを取り除く方法について詳しく教えていただけますか?

[編集]次のコードスニペットがあります。コンパイルすると、上記の警告が表示されます。どうすれば修正できるか教えていただけますか?

   test_function(){
   BOOL BoolTest;
   BoolTest = test_fucntion2();

   #ifdef CHECK
   if (!BoolTest) {
   misc_StartErrorReport();
   misc_ErrorReport("\n test_function2: Input not indexed.\n");
   misc_FinishErrorReport();
          }
   #endif
   // 
    BoolTest is no more used below it.
   // } 
4

5 に答える 5

7

次の宣言と初期化の周りにプリプロセッサガードを含める必要がありますBoolTest

test_function()
{
#ifdef CHECK
    BOOL BoolTest = test_function2();
#else
    test_function2();
#endif


#ifdef CHECK
    if (!BoolTest) {
        misc_StartErrorReport();
        misc_ErrorReport("\n test_function2: Input not indexed.\n");
        misc_FinishErrorReport();
    }
#endif

(これは、おそらくその副作用のために、定義されていないtest_function2()場合でも呼び出したいと想定しています-そうでない場合は、セクションは必要なく、2つのブロックを1つに組み合わせることができます)。CHECK#else#ifdef

于 2011-08-19T04:57:58.383 に答える
4

変数を設定すると、それに値が割り当てられます(おそらく暗黙的に)

int main(void) {
    int local1, local2;
    local1 = 0; /* local1 set to 0 */
    local2 = 0; /* local2 set to 0 */
    return 0;
}

上記のプログラムでは、両方の変数が値に設定されていますが、使用されていません。2行目を

    int local2 = local1;

今、私はlocal1変数を使用しました-そして警告はたった1であるはずです。

警告を取り除くには、コードから割り当てを削除します。これにより、他の警告が発生する可能性があります... :)

于 2011-08-18T22:56:38.937 に答える
2

これは、変数に値を割り当てた後、コードの後半でその値を読み取ることは決してないことを意味します(したがって、「設定されているが使用されていない」という言い回し)。例えば:

int useful = 10;
int useless = 3;
if (useful) {
    //Do stuff
}

usefuluseless値の両方を指定しますが、の値のみを読み取ることに注意してくださいuseful。通常、このメッセージが表示された場合は、変数を忘れたか、その変数を必要としなくなったステートメントをインライン化する方法を見つけたことを意味します。

于 2011-08-18T22:56:48.680 に答える
1

g++7.x以降およびclang++4.x以降(c ++ 11以降を使用)、およびVisual Studio 2017バージョン15.3以降(/ std:c ++ 17で使用可能)では、次を使用できます。標準化された[[maybe_unused]]属性。

例えば、

int main()
{
    int x [[maybe_unused]] = 5;
}

-Wunused-variableなどを使用しても、警告は表示されません。

于 2018-06-05T17:13:43.980 に答える
0

BoolTestを使用していません。コードとコードの間に違いがないことがわかります

test_function(){
#ifdef CHECK
if (!test_fucntion2()) {
于 2011-08-23T14:02:52.203 に答える