读书人

函数名的sizeof大小是多少?求缘故

发布时间: 2013-03-01 18:33:02 作者: rapoo

函数名的sizeof大小是多少?求原因
#include <stdio.h>
int fn()
{
int a=10000;
}

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

为什么最后输出结果是1?
[解决办法]
标准文档明明白白的说了 sizeof的操作对象不能是 void 和 函数名
[解决办法]
函数名不能被sizeof
[解决办法]
对函数名进行sizeof运算是没有定义的行为,
但是如果是函数调用则是求函数返回值的大小。
多看书..
[解决办法]
sizeof(函数名),这个属于未定义的行为。
如果是调用的话,你的函数并没有返回任何的值。
[解决办法]
The unary-expression cannot represent a bit-field object, an incomplete type, or a function designator.

The sizeof operator cannot be used with the following operands:
Functions. (However, sizeof can be applied to pointers to functions.)
Bit fields.
Undefined classes.
The type void.
Dynamically allocated arrays.
External arrays.
Incomplete types.
Parenthesized names of incomplete types.

MSDN上查的,平时还真没注意。

[解决办法]
是的,不能用函数名做sizeof的参数,函数名其实是函数的入口地址,你可以定义一个指向函数的指针变量,然后sizeof这个指针变量,不过因为指针变量存储的是地址,用整形表示,所以sizeof 任何一个函数指针变量返回的值都相同,等同于sizof(int);
sizof(fn())的到的是fn() 返回值类型的size, 如果fn()返回值为char类型,则 sizof(fn())的值为1

读书人网 >C++

热点推荐