return 0;
}
void func1(){}
double func2(){
return 0.1;
}
void main(){
printf("%d\n",sizeof(func));
printf("%d\n",sizeof(func1));
printf("%d\n",sizeof(func2));
}
以上程序在vc中编译不通过,用gcc编译通过,运行结果是:
1
1
1
定义的double型函数,不应该是8字节吗?为什么都是1byte。
这是为什么?
34 个解决方案
#1
对函数名进行sizeof运算是没有定义的行为,但是如果是函数调用则是求函数返回值的大小
#2
sizeof 是编译时就确定了,
printf("%d\n",sizeof( func() ));
printf("%d\n",sizeof( func1() ));
printf("%d\n",sizeof( func2() ));
试试看
printf("%d\n",sizeof( func() ));
printf("%d\n",sizeof( func1() ));
printf("%d\n",sizeof( func2() ));
试试看
#3
R:\atl\33\main.cpp|21|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
R:\atl\33\main.cpp|22|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
R:\atl\33\main.cpp|23|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
||=== 已完成构建: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
R:\atl\33\main.cpp|22|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
R:\atl\33\main.cpp|23|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
||=== 已完成构建: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
#4
LZ拿了 木棍、铁棍、熟料棍,原来打算问,到底谁比较硬,
结果却问分别有几根。。。。。
#5
sizeof( func() ) 和sizeof(fun)区别是什么?
#6
这课题不值得研究吧
#7
sizeof int
sizeof (int)
sizeof后面一般只跟类型。
#8
我在1楼已经给出你要知道的了。
#9
sizeof 不是函数,而是一个操作符!没参数这东西 是用来计算一个对象或者类型的大小的,其结果是在编译时已经计算好了
#10
sizeof()函数名是没有意义的.....
#11
不爱看书的人,你告诉他他也未必相信
#12
看下C标准吧
C89 specified that sizeof’s operand can be any value except a bit-field, a void expression, or a function designator.
---所以对函数本身的sizeof应该是无意义的
...
these expressions determine the size of the type used for:
sizeof(F(x)) // ... F’s return value
----sizeof(F(x))可以得到函数返回值的大小
C89 specified that sizeof’s operand can be any value except a bit-field, a void expression, or a function designator.
---所以对函数本身的sizeof应该是无意义的
...
these expressions determine the size of the type used for:
sizeof(F(x)) // ... F’s return value
----sizeof(F(x))可以得到函数返回值的大小
#13
我编了一个程序如下
#include <stdio.h>
#include <stdlib.h>
int fun(int a)
{
return a;
}
void main ()
{
int a;
a=1;
printf ("%d\n",sizeof(fun(a)));
}
这个是可以运行的,我试了试,没问题!
#include <stdio.h>
#include <stdlib.h>
int fun(int a)
{
return a;
}
void main ()
{
int a;
a=1;
printf ("%d\n",sizeof(fun(a)));
}
这个是可以运行的,我试了试,没问题!
#14
sizeof()是关键词吧。。。
#15
二楼是正解,因为sizeof(func());中的func()是一个返回值了相当于
#16
printf("%d\n",sizeof( int));
printf("%d\n",sizeof( double));
以上代码更能满足你的要求吧。
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
sizeof是操作符而不是函数。
printf("%d\n",sizeof( double));
以上代码更能满足你的要求吧。
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
sizeof是操作符而不是函数。
#17
sizeof(fun()); //对返回值调用sizeof,返回返回值的大小
sizeof(fun); //对函数名调用sizeof,无意义
#18
++
#19
这是一个未定义行为,结果不确定。
func是函数名,是这个函数执行的入口;
func()是调用函数后的返回值,是这个函数返回的结果。
func是函数名,是这个函数执行的入口;
func()是调用函数后的返回值,是这个函数返回的结果。
#20
楼上正确。
再补充一句:在标准C++中这种方式是不允许的
再补充一句:在标准C++中这种方式是不允许的
#21
看看书把
#22
sizeof()是关键词,sizeof(函数名)是没有意义的
#23
1楼已经解释的很清楚了
#24
虽然我之前也不爱看书,但是,从实际结果中,我还是明白这个道理的。
#25
sizeof()不是函数哦
#26
sizeof 关键字...
#27
#28
这个以前查过,是gcc的扩展。不过我不清楚有什么意义。
ISO C99
6.5.3.4 The sizeof operator
Constraints
1 The sizeof operator shall not be applied to an expression that has function type or an
incomplete type, to the parenthesized name of such a type, or to an expression that
designates a bit-field member.
按ISO C这种用法就是错的(不是1L说的未定义,因为这里的Constraints,在Clause 4里说了的shall/shall not被违反时是导致undefined behavior是指不在Constraints的情况下),编译器应该提出错误。
LZ用gcc加-std=c99 -pedantic试试。
ISO C99
6.5.3.4 The sizeof operator
Constraints
1 The sizeof operator shall not be applied to an expression that has function type or an
incomplete type, to the parenthesized name of such a type, or to an expression that
designates a bit-field member.
按ISO C这种用法就是错的(不是1L说的未定义,因为这里的Constraints,在Clause 4里说了的shall/shall not被违反时是导致undefined behavior是指不在Constraints的情况下),编译器应该提出错误。
LZ用gcc加-std=c99 -pedantic试试。
#29
……如果要错误是-pedantic-error。
标准方面其实这里应该都一样。可以-std=c89/-ansi。
#30
sizeof不是函数,是关键字
#31
函数名是个指针
#32
函数名是地址。sizeof是操作符,求变量在内存中所占的大小。
#33
对函数名直接进行sizeof操作没见过,也没用过,一般都是进行类型计算结构计算。
MSDN这么说的:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
MSDN这么说的:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
#34
不过这样写,没有什么意义……
#1
对函数名进行sizeof运算是没有定义的行为,但是如果是函数调用则是求函数返回值的大小
#2
sizeof 是编译时就确定了,
printf("%d\n",sizeof( func() ));
printf("%d\n",sizeof( func1() ));
printf("%d\n",sizeof( func2() ));
试试看
printf("%d\n",sizeof( func() ));
printf("%d\n",sizeof( func1() ));
printf("%d\n",sizeof( func2() ));
试试看
#3
R:\atl\33\main.cpp|21|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
R:\atl\33\main.cpp|22|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
R:\atl\33\main.cpp|23|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
||=== 已完成构建: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
R:\atl\33\main.cpp|22|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
R:\atl\33\main.cpp|23|error: ISO C++ 不允许将‘sizeof’应用到函数类型的表达式上|
||=== 已完成构建: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|
#4
LZ拿了 木棍、铁棍、熟料棍,原来打算问,到底谁比较硬,
结果却问分别有几根。。。。。
#5
sizeof( func() ) 和sizeof(fun)区别是什么?
#6
这课题不值得研究吧
#7
sizeof int
sizeof (int)
sizeof后面一般只跟类型。
#8
我在1楼已经给出你要知道的了。
#9
sizeof 不是函数,而是一个操作符!没参数这东西 是用来计算一个对象或者类型的大小的,其结果是在编译时已经计算好了
#10
sizeof()函数名是没有意义的.....
#11
不爱看书的人,你告诉他他也未必相信
#12
看下C标准吧
C89 specified that sizeof’s operand can be any value except a bit-field, a void expression, or a function designator.
---所以对函数本身的sizeof应该是无意义的
...
these expressions determine the size of the type used for:
sizeof(F(x)) // ... F’s return value
----sizeof(F(x))可以得到函数返回值的大小
C89 specified that sizeof’s operand can be any value except a bit-field, a void expression, or a function designator.
---所以对函数本身的sizeof应该是无意义的
...
these expressions determine the size of the type used for:
sizeof(F(x)) // ... F’s return value
----sizeof(F(x))可以得到函数返回值的大小
#13
我编了一个程序如下
#include <stdio.h>
#include <stdlib.h>
int fun(int a)
{
return a;
}
void main ()
{
int a;
a=1;
printf ("%d\n",sizeof(fun(a)));
}
这个是可以运行的,我试了试,没问题!
#include <stdio.h>
#include <stdlib.h>
int fun(int a)
{
return a;
}
void main ()
{
int a;
a=1;
printf ("%d\n",sizeof(fun(a)));
}
这个是可以运行的,我试了试,没问题!
#14
sizeof()是关键词吧。。。
#15
二楼是正解,因为sizeof(func());中的func()是一个返回值了相当于
#16
printf("%d\n",sizeof( int));
printf("%d\n",sizeof( double));
以上代码更能满足你的要求吧。
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
sizeof是操作符而不是函数。
printf("%d\n",sizeof( double));
以上代码更能满足你的要求吧。
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。
sizeof是操作符而不是函数。
#17
sizeof(fun()); //对返回值调用sizeof,返回返回值的大小
sizeof(fun); //对函数名调用sizeof,无意义
#18
++
#19
这是一个未定义行为,结果不确定。
func是函数名,是这个函数执行的入口;
func()是调用函数后的返回值,是这个函数返回的结果。
func是函数名,是这个函数执行的入口;
func()是调用函数后的返回值,是这个函数返回的结果。
#20
楼上正确。
再补充一句:在标准C++中这种方式是不允许的
再补充一句:在标准C++中这种方式是不允许的
#21
看看书把
#22
sizeof()是关键词,sizeof(函数名)是没有意义的
#23
1楼已经解释的很清楚了
#24
虽然我之前也不爱看书,但是,从实际结果中,我还是明白这个道理的。
#25
sizeof()不是函数哦
#26
sizeof 关键字...
#27
#28
这个以前查过,是gcc的扩展。不过我不清楚有什么意义。
ISO C99
6.5.3.4 The sizeof operator
Constraints
1 The sizeof operator shall not be applied to an expression that has function type or an
incomplete type, to the parenthesized name of such a type, or to an expression that
designates a bit-field member.
按ISO C这种用法就是错的(不是1L说的未定义,因为这里的Constraints,在Clause 4里说了的shall/shall not被违反时是导致undefined behavior是指不在Constraints的情况下),编译器应该提出错误。
LZ用gcc加-std=c99 -pedantic试试。
ISO C99
6.5.3.4 The sizeof operator
Constraints
1 The sizeof operator shall not be applied to an expression that has function type or an
incomplete type, to the parenthesized name of such a type, or to an expression that
designates a bit-field member.
按ISO C这种用法就是错的(不是1L说的未定义,因为这里的Constraints,在Clause 4里说了的shall/shall not被违反时是导致undefined behavior是指不在Constraints的情况下),编译器应该提出错误。
LZ用gcc加-std=c99 -pedantic试试。
#29
……如果要错误是-pedantic-error。
标准方面其实这里应该都一样。可以-std=c89/-ansi。
#30
sizeof不是函数,是关键字
#31
函数名是个指针
#32
函数名是地址。sizeof是操作符,求变量在内存中所占的大小。
#33
对函数名直接进行sizeof操作没见过,也没用过,一般都是进行类型计算结构计算。
MSDN这么说的:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
MSDN这么说的:
The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.
#34
不过这样写,没有什么意义……