0
#include <stdio.h>
#include <stdlib.h>

こんにちは、なぜこのプログラムが実行されないのか疑問に思っていました。scanf 関数を正しく実行するのにいつも苦労しているようです。次のエラーが表示されます。

エラー: 属性 warn_unused_result で宣言された scanf の戻り値を無視します

注: 現在のプログラムを作成するためのより効率的な方法があることは知っていますが、それは重要ではありません。このエラーの意味と、エラーが発生し続ける理由と、おそらく解決策を知りたいです。君たちありがとう。コードは次のとおりです。

int main (int argc, char *argv[]){

    int x;
    int y;
    int z;
    int temp;

    scanf("%d", &x);
    scanf("%d", &y);
    scanf("%d", &z);

        if (x > y) {
           temp = x;
           x = y;
           y = temp;
        }

        if (y > z) {
            temp = y;
            y = z;
            z = temp;
        }

        if (x > z) {
            temp = x;
            x = z;
            z = temp;
        }

        printf("%d", x);
        printf("%d", y);
        printf("%d", z);

  return EXIT_SUCCESS; }
4

2 に答える 2

2

GCC のドキュメントから:

このwarn_unused_result属性を持つ関数の呼び出し元がその戻り値を使用しない場合、この属性により警告が発行されます。これは、結果をチェックしないことがセキュリティ上の問題であるか、常にバグである関数 ( など) に役立ちます realloc

      int fn () __attribute__ ((warn_unused_result));
      int foo ()
      {
        if (fn () < 0) return -1;
        fn ();
        return 0;
      }

5 行目に警告が表示されます。

于 2013-04-07T09:56:05.670 に答える
2

コンパイラから得られるエラーは、まさにそのとおりです。アプリケーションが正しく動作するためには、scanf の戻り値をチェックする必要があります。返される可能性のある値は、man ページに記載されています。

エラーの原因の説明については、gcc マニュアルの「warn_unused_result」の部分を参照してください(Peter R の返信で引用されています)。

于 2013-04-07T09:51:56.470 に答える