web-dev-qa-db-ja.com

引数1を渡すと、ポインターのターゲットタイプから修飾子が破棄されます

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

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

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

この警告はどういう意味ですか?

14
Alex Nichols

これは、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配列が指す文字列プログラムによって変更可能である必要があります、およびプログラムの起動とプログラムの終了の間で最後に格納された値を保持します。

19
Ed S.