15

私の主な機能は次のとおりです。

int main(int argc, char const *argv[])
{
    huffenc(argv[1]);
    return 0;
}

コンパイラは次の警告を返します。

huffenc.c:76: warning: passing argument 1 of ‘huffenc’ discards qualifiers from pointer target type

参考までhuffencに、char*入力を受け取り、関数が実行されます。サンプル入力の「無意味」を介して./huffenc senselessness

この警告は何を意味するのでしょうか?

4

1 に答える 1

20

constこれは、非引数を取る関数に引数を渡していることを意味します。constこれは、明らかな理由で潜在的に悪いことです。

huffencおそらく非引数は必要ないので、.constを取るべきconst char*です。ただし、あなたの定義はmain標準的ではありません。

C99 標準のセクション 5.1.2.2.1 (プログラムの起動) には次のように記載されています。

プログラムの起動時に呼び出される関数は main と呼ばれます。実装は、この関数のプロトタイプを宣言していません。これは、int の戻り型でパラメーターなしで定義されます。

int main(void) { /* ... */ }

または 2 つのパラメーター (ここでは argc および argv と呼ばれますが、宣言されている関数に対してローカルであるため、任意の名前を使用できます):

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

または同等のもの;9) または他の実装定義の方法で。

と、続けて言うと…

...パラメータargcとargv、およびargv配列が指す文字列は、プログラムによって変更可能であり、プログラムの起動からプログラムの終了までの間、最後に保存された値を保持します。

于 2013-03-13T23:50:07.430 に答える