调用函数时没写括号的问题

clancy_js 2008-04-25 05:28:39
代码如下:



#include <stdio.h>
void fun()
{
printf("hello");
}

void main()
{
fun;
return;
}



编译通过,存在警告,运行时不能显示hello,为什么?

从编译器的角度解释一下,越详细越好!
...全文
327 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
rushman 2008-04-25
  • 打赏
  • 举报
回复
函数名可以看作是一种指针常量。
单个的常量、变量也是表达式。
所以 fun; 是一个合法的表达式。
这个表达式什么都不作,仅返回 fun 地址,而不是调用 fun,所以没有输出。
wencn911 2008-04-25
  • 打赏
  • 举报
回复
编译器如何判断下面这个函数呢?括号匹配前的不是关键字
ahuisafe 2008-04-25
  • 打赏
  • 举报
回复
mark
xkyx_cn 2008-04-25
  • 打赏
  • 举报
回复
这样就不是函数调用了,编译器把fun作为一个right value,计算后丢弃
既然没调用函数,那函数fun里的代码当然不会被执行

如同:
int a = 0;
a; //什么也不做,一般编译器会直接跳过这句
baihacker 2008-04-25
  • 打赏
  • 举报
回复
fun是一个函数名
在这里转换为一个函数指针
这个指针作为一个表达式
再加上;
就构成了一个语句

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧