sizeof与函数

咋一看标题,你很有可能会不屑一顾。本人向来不愿意在自己仅有的那块博客空间里放一些被谈得发烂的东西。在写这篇文章之前,我还特地地Google了一下,没发现与此相关的内容。

这里将讨论关于C/C++中sizeof的一个不怎么为人所知的东西。

 

请先看下列代码:

 

呵呵,以上代码输出什么呢?大家不要凭感觉,请在你的编译器上先试试,C/C++都行。

 

大家不必大惊小怪。因为仅看到"The size is: 1“这样的结果是完全正常的。这就是本次的主题——sizeof与函数。

 

在ANSI-C89以及ISO/IEC C99/00中提到:

 

 A function designator is an expression that has function type.

Except when it is the operand of the sizeof operator /25/ or the unary

& operator, a function designator with type ``function returning type

'' is converted to an expression that has type ``pointer to function

returning type .''

 

上面谈到对于一个函数指示符,如果它作为一个sizeof操作符的一个操作数,那么它就不是一个函数指针类型,而是一个函数类型

在Intel编译器中,sizeof(dummy)直接编译报错。错误信息是:“sizeof操作数不能是函数“。而在GCC中,则返回1,而不管dummy的返回类型是什么。

如果dummy返回类型为void,那么sizeof(dummy)在ICPC中为0,在GCC中为1。

 

下面再看一下代码:

 

 

上述代码中,结果分别是4、2,即函数的返回类型大小。作为sizeof的操作数,函数不会被调用,sizeof(dummy1())的作用完全就是萃取dummy1的返回类型。

 

我们再看看以下代码:

我们可以看看输出。然后发现sizeof()操作中的表达式并未执行。所以函数没有被调用也就可以理解了。即,sizeof操作符中的表达式不会被计算,它仅仅获取表达式的返回类型的大小。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值