パスワードを忘れた? アカウント作成
452224 journal

Endowsの日記: Endows の へっぽこプログラマ日誌 第6.1回 4

日記 by Endows

ありゃ。

gcc でも普通にコンパイラ通りました。

出力はやはり int のサイズである 4 。

謎は深まるばかりである。

解釈が間違っているのか…?

『我こそは C ウィザード』という方、読んでいらっしゃったらこの疑問についてお答えください…。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Endows (8644) on 2003年04月19日 0時00分 (#301147) ホームページ 日記

    ソースを書き換えたりしてエラーメッセージなどを見た結果、どうやら
    sizeof(main) がダメで、
    sizeof(main()) は OK ということらしい。

    いまいち理解度が十分でないが、今のところはそういうことで結論としておこう。

    • ちょっと手もと(gcc3.2.2 on FreeBSD 4.8R)で試してみました.

      --- テストコード ---
      #include

      double func(void)
      {
              return 0.0;
      }

      int
      main(void)
      {
              double *ptr = NULL;

              double (*func2)(void) = func;

              printf("sizeof(func) = %d\n",sizeof(func));
              printf("sizeof(func()) = %d\n",sizeof(func()));
              printf("sizeof(func2) = %d\n",sizeof(func2));
              printf("sizeof(func2()) = %d\n",sizeof(func2()));
              printf("sizeof(ptr) = %d\n",sizeof(ptr));
              printf("sizeof(*ptr) = %d\n",sizeof(*ptr));

              return 0;
      }
      --- ここまで ---

      --- 結果 ---
      sizeof(func) = 1
      sizeof(func()) = 8
      sizeof(func2) = 4
      sizeof(func2()) = 8
      sizeof(ptr) = 4
      sizeof(*ptr) = 8
      --- ここまで ---

      うーん,確かにsizeof(func)だとおかしな結果になってますねぇ.
      関数のポインタ型ということで他のポインタ型と同じ値が返ってくると
      思っていたのですが.1が返ってくるとは意外でした.

      一方で,"関数のポインタ"として宣言されていれば,
      sizeofもちゃんとわかるみたいですね.

      まぁsizeof(func())は一応それっぽい値を返すみたいですけど,
      個人的にはあんまり使わない方がいいんじゃないかなーと思います.
      親コメント
typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...