小野@名古屋大学 です.

しまった.

<bqhkot$m9r$1@news511.nifty.com>の記事において
kounoike@mbh.nifty.comさんは書きました。
kounoike> で,OKと書いたのは,単に
kounoike> int hoge(char argv[][]);
kounoike> がコンパイルできたので単純にOKではと思った次第ですが,違うのかな。
「ISO C」が変わったんだった.

C89 (前のバージョン) ではアウトですが, C99 (新しいバージョン) で
はできるようになった... のかな? 規格を読んでもよくわからん.
T [] は imcomplete type だから, それを使った T [][] はアウトのよ
うな気がするんだが.... どうも使わないとエラーにならないようだ.

下に示す例では gcc でもエラーになるんだけど....

kounoike> > main の宣言として ISO C で規定されているのは
kounoike> 上の話は、mainに限った話ではないですよね。単に、関数の引数にchar argv[][]と
kounoike> 言った類の表記がOKかどうかの話と思ってたのですが、なんか勘違いしているのか
kounoike> な。
C99 になって, gcc の拡張機能がかなり取り込まれたんですよね....
# でも機能が大きくなりすぎたので, gcc でも完全には対応できてない.

例:
-------------------- ここから --------------------
#include <stdio.h>

int main(int argc, char argv[][])
{
    for (int i = 0; argv[i] != 0; i++) {
        printf("argv[%d] = `%s'.\n", i, argv[i]);
    }
    return 0;
}
-- 
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男