重複の可能性:
C の関数のサイズが常に 1 バイトなのはなぜですか?
の次のコード スニペットを検討してくださいC
。
double fn()
{
return 1.1 ;
}
int main()
{
printf( "%d", sizeof( fn ) );
return 0;
}
出力は次のとおりです。
1
sizeof() 演算子が 1 バイトを出力するのはなぜですか?
重複の可能性:
C の関数のサイズが常に 1 バイトなのはなぜですか?
の次のコード スニペットを検討してくださいC
。
double fn()
{
return 1.1 ;
}
int main()
{
printf( "%d", sizeof( fn ) );
return 0;
}
出力は次のとおりです。
1
sizeof() 演算子が 1 バイトを出力するのはなぜですか?
sizeof
演算子を関数に適用しないでください。これは無意味であり、その動作は定義されていません。
サイズ演算子は、関数または不完全な型を持つ式には適用されません...
参照: ISO/IEC 14882 (セクション 5.3.3)
sizeof 演算子は、関数型または不完全な型を持つ式、そのような型のかっこで囲まれた名前、またはビット フィールド メンバーを指定する式には適用されません。
参照: ISO/IEC 9899:1999 (セクション 6.5.3.4)
sizeof 演算子は、次のものには適用できない場合があります。
- ビットフィールド
- 関数型
- 未定義の構造体またはクラス
- 不完全型 (void など)
関数で使用するsizeof
と、ここで説明されているように、その値は無意味ですWhy is the size of a function in C always 1 byte?
戻り値のサイズを取得するには、 を使用してみてください。ただし、 はコンパイル時の定数であるため (ほとんどのシナリオでsizeof(fn())
は)、実際には呼び出されません。sizeof
fn
ただし、関数が占めるサイズをバイト単位で取得することは、残念ながら移植可能ではありません。あなたが本当に達成したいことを教えていただければ、おそらくもっと多くのことができるようになるでしょう。