免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2537 | 回复: 6
打印 上一主题 下一主题

函数调用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-26 14:45 |只看该作者 |倒序浏览
最近在做一个类C 的小型编译器,在语义分析时遇到一个问题:函数调用与函数声明之间如何有效识别?

我的理解:
例子如下:

1)函数的声明:
int abc(int a, double b);
void xyz(char *a, int b);

2) 函数调用
int a = abc(10,20.1);
xyz("aaa",10);

上面1)和2)肉眼很容易分辨出哪个是声明,哪个是调用。但对于C编译器来说,在扫描“声明”时,会将函数名、参数等放入符号表(看需要可能要设置作用域)。而在符号表,函数名和参数等都只是符号(且通常的做法还会记录他们的类型),那函数声明与函数调用的区别就不容易判别了。因为对于函数调用(如2))来说,函数名同样为符号abc(类型为int);第一个参数都为int类型,第二个参数都为double类型.......

另,函数声明的意义和函数调用的意义是不一样的。函数的声明主要是针对符号表的,而函数的调用则更多的是跟栈桢、作用域等打交道。因此想请教一下,如何才能有效地识别“函数的声明”及“函数的调用?谢谢。

论坛徽章:
0
2 [报告]
发表于 2010-09-26 14:46 |只看该作者
回复 1# kallytin


  先顶一下

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
3 [报告]
发表于 2010-09-26 17:13 |只看该作者
这个,函数声明和调用的语法是不一样的吧。你可以对照着C语法标准看看。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2010-09-27 09:22 |只看该作者
对于非gcc语法(不能内嵌局部函数),应当很好判别吧。
否则,充其量最多相当于if-else悬挂问题,你把后面的括号里面的部分都分析了,再来解决这个函数是申明还是调用。

论坛徽章:
0
5 [报告]
发表于 2010-09-27 10:26 |只看该作者
已经有一个青年,说他要发明一种新语言,比C++强大,比C++简单,比C++高效。
又有两个青年,组成一个团伙。要发明一种新语言,比C++强大,比C++简单,比C++高效。
又看见lz,我老了

论坛徽章:
0
6 [报告]
发表于 2010-09-27 11:32 |只看该作者
已经有一个青年,说他要发明一种新语言,比C++强大,比C++简单,比C++高效。
又有两个青年,组成一个团伙。 ...
prolj 发表于 2010-09-27 10:26



    哈哈~他发明的语言一定是C+++ {:3_197:}

论坛徽章:
0
7 [报告]
发表于 2010-09-27 11:33 |只看该作者
应该是C+ {:3_179:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP