-1

重複の可能性:
C の関数のサイズが常に 1 バイトなのはなぜですか?

の次のコード スニペットを検討してくださいC

double fn()
{
    return 1.1 ;
}

int main()
{
    printf( "%d", sizeof( fn ) );
    return 0;
}

出力は次のとおりです。

1

sizeof() 演算子が 1 バイトを出力するのはなぜですか?

4

2 に答える 2

4

sizeof演算子を関数に適用しないでください。これは無意味であり、その動作は定義されていません。

サイズ演算子は、関数または不完全な型を持つ式には適用されません...

参照: ISO/IEC 14882 (セクション 5.3.3)


sizeof 演算子は、関数型または不完全な型を持つ式、そのような型のかっこで囲まれた名前、またはビット フィールド メンバーを指定する式には適用されません。

参照: ISO/IEC 9899:1999 (セクション 6.5.3.4)


sizeof 演算子は、次のものには適用できない場合があります。

  • ビットフィールド
  • 関数型
  • 未定義の構造体またはクラス
  • 不完全型 (void など)

参照: http://publib.boulder.ibm.com/

于 2012-09-08T00:11:20.770 に答える
2

関数で使用するsizeofと、ここで説明されているように、その値は無意味ですWhy is the size of a function in C always 1 byte?

戻り値のサイズを取得するには、 を使用してみてください。ただし、 はコンパイル時の定数であるため (ほとんどのシナリオでsizeof(fn())は)、実際には呼び出されません。sizeoffn

ただし、関数が占めるサイズをバイト単位で取得することは、残念ながら移植可能ではありません。あなたが本当に達成したいことを教えていただければ、おそらくもっと多くのことができるようになるでしょう。

于 2012-09-08T00:11:27.893 に答える