C標準(5.1.2.2.1 Program startup)は次のように述べています。
プログラムの起動時に呼び出される関数は main と呼ばれます。[...]
int の戻り型でパラメータなしで定義する必要があります。
int main(void) { /* ... */ }
または 2 つのパラメーターを使用[...] :
int main(int argc, char *argv[]) { /* ... */ }
そして後にこう言います。
argc の値は非負でなければなりません。
- おそらく「引数カウント」を意味するとして定義されるべきではない のはなぜですか?
argc
unsigned int
argc
argc
のインデックスとして使用する必要がありargv
ますか?
それで、C 標準が配列のインデックスの型について何か言っているかどうか疑問に思い始めました。署名されていますか?
6.5.2.1 配列の添え字:
式の 1 つは「<em>オブジェクト型へのポインタ」型を持ち、もう 1 つの式は整数型を持ち、結果は型「<em>type」を持ちます。
その署名については何も述べていません (または、見つけられませんでした)。負の配列インデックス ( array[-1]
) を使用するコードをよく見かけますが、未定義の動作ではありませんか?
- 配列のインデックスは符号なしにする必要がありますか?