2008年7月12日土曜日

【実践C】第6章 関数原型宣言

日々、こつこつ。

  • list0602:コンパイラからのメッセージ。

    list0602.c: In function ‘main’:
    list0602.c:10: warning: implicit declaration of function ‘sqr’
    list0602.c:10: warning: format ‘%.3f’ expects type ‘double’, but argument 2 has type ‘int’
    list0602.c: At top level:
    list0602.c:16: error: conflicting types for ‘sqr’
    list0602.c:10: error: previous implicit declaration of ‘sqr’ was here

  • list0603:う、次のような警告はでるが、動作は正常。なぜ?

    list0603.c: In function ‘main’:
    list0603.c:10: warning: implicit declaration of function ‘pow’
    list0603.c:10: warning: incompatible implicit declaration of built-in function ‘pow’

  • ああ、そうか、たぶんdoubleとintのサイズが私の環境だと同じだからか。
  • せめて

    struct {
    int x;
    int y;
    } z;

    としないと、私の環境ではコンパイルできなかった。
  • K&Rスタイルでは、

    int func(a, b)
    int a;
    int b;
    { ... }

    とな。なんと。
  • list0610。うーん、これもちゃんと動いちゃう。
  • おお。int printf(const char *, ...)というように...で可変数引数を表現できるんだ。
  • プロトタイプの仮引数の識別子と、本体の対応物の識別子は違っていてもよいんだ。
  • エラーメッセージとかソースとかで、'__'からはじまる識別子が多い理由がわかった。

プログラマへの道のりは、長いなぁ。。。 こつこつ。

0 件のコメント: