gcc 源码分析-前端篇3

本文介绍了GCC编译器中如何使用struct tree_decl结构来表示C语言中的函数。包括函数的返回值、参数、名称等关键信息,并通过一个具体例子说明了函数在语法树中的表示形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3. GCC如何函表示一个函数
  对c语言来说,函数是其核心,所有的东西都在围绕着函数在转。对于一个函数来说,它主要的一些特性如下:
 
 1. 有一个返回值,在这里我们没有把返回值的函数认为它的返回值是void;
 2. 它有传入的参数,而这个参数个数不确定,可多可少,也可以没有;
 3. 它有一个函数名称,这个名称具有唯一性,也就是同一个工程,不能有名称一样的多个函数;
 4. 它有函数执行体;

 对于函数来说,还是通过struct tree_decl结构来表示:
 filename:函数所在文件名;
 linenum: 函数所在的行号;
 print_name: 函数名称,asii 表示;
 assembler_name: 函数名的内部名称,asii表示;
 name:    函数的名字,用一个struct tree_identifier结构来表示;
 common::type 表示函数类型,这个实际上是一个tree_type的结构来表示,它的common::type表示函数的返回类型
              它实际上就是在初始化时生成的表示数据类型的节点,如果是int型,它就是一个int 型节点;
              它的values 成员记录的是函数的参数,是一个struct tree_int_cst类型,通过它的chain把几个参数串连起来;

 对于这样的一个源代码:
 void main()
 {
   
   
 }
 它最后转成一棵语法树,但是这个树只有一个节点,就是表示函数的节点,它实际上是一个struct tree_decl结构,它的name成员表示
 函数的名称,type 成员里面既记录了函数返回值,也记录了函数的参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值