c++-c编译原理,如何处理同名局部变量和全局变量

问题描述

c编译原理,如何处理同名局部变量和全局变量

c中,一个文件里局部变量可以和全局变量重名。那这个文件编译出来的.o中,这两个变量的符号是怎么表示的呢?不可能符号是相同的呀!c++处理这种情况时,符号表示和c一样还是不同呢?

解决方案

建议看《linux平台上学C语言》这本书,底层讲得挺详细的。
在同一个.o文件里不存在链接性的问题,怎么名应该就无所谓了。对于全局变量跟局部变量,我觉得放的位置都差那么多,随便加个前缀就区分开了,还有局部变量可能一开始声明的时候就被替换成地址了,编译生成的符号表里是没有局部变量的(符号表是用来两个或以上的.o文件重新链接定位时用的,因为局部变量根本不能被其他文件链接!)C++不同的编译器所对于同样的函数会生产不一样的符号(这样是为什么能重载函数),所以不同C++编译器出的.o文件是不能互相链接的,符号会出错。这么说不知道解了你心中的疑惑没?那本书挺好的,解了我很多疑问,也告诉了我很多不知道的“秘密”。

时间: 2024-08-07 17:48:18

c++-c编译原理,如何处理同名局部变量和全局变量的相关文章

深入剖析ASP.NET的编译原理之二:预编译(Precompilation)

在本篇文章的第一部分:[原创]深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation),详细讨论了ASP.NET如何进行动态编译的,现在我们来谈谈另外一种重要的编译方式:预编译(Precompilation). 目录 一.为什么要进行预编译 二.In Place Pre-compilation V.S. Pre-compilation for Deployment 三.Non-updatable Pre-compilation V.S. Updatable P

【编译原理】语法分析LL(1)分析法的FIRST和FOLLOW集

近来复习编译原理,语法分析中的自上而下LL(1)分析法,需要构造求出一个文法的FIRST和FOLLOW集,然后构造分析表,利用分析表+一个栈来做自上而下的语法分析(递归下降/预测分析),可是这个FIRST集合FOLLOW集看得我头大... 教课书上的规则如下,用我理解的语言描述的: 任意符号α的FIRST集求法: 1. α为终结符,则把它自身加入FIRSRT(α) 2. α为非终结符,则: (1)若存在产生式α->a...,则把a加入FIRST(α),其中a可以为ε (2)若存在一串非终结符Y1

编译原理scanner的java代码

问题描述 编译原理scanner的java代码 package lexer; public class Token { public final int tag;public Token(int t) { tag = t;}public String toString() { return """" + (char) tag;} } package lexer; public class Tag { public final static int AND = 256

求各位大神帮忙做一下编译原理程序设计

问题描述 求各位大神帮忙做一下编译原理程序设计 1.设计词法分析器 设计各单词的状态转换图,并为不同的单词设计种别码.将词法分析器设计成供语 法分析器调用的子程序.功能包括:具备预处理功能.将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序:能够拼出语言中的各个单词:http://ask.csdn.net/#将拼出的标识符填入符号表:返回(种别码, 属性值).2.目标代码生成器c. 能完成指定寄存器个数的情况下将一中间代码程序段翻译成汇编语言目标代码(汇

编译原理之文法

关于编译原理这块之前根本没有涉及过,这次要用到这里的知识就需要来接触一下这里的内容.编译原理顾名思义就是处理高级语言,使之称为计算机能够识别的语言(低级语言)的原理.而文法呢?就是用来描述程序设计语言的方法.类似佛法,用来描述佛家的诵经禅道的规则的.不用去纠结这个名字,知道这个含义,足以. 文法 概念 终结符和非终结符 如图:在p这个推导式的集合中,存在六个推导式.其中S.A.B为非终结符.a.b.c.d.q.p为终结符.终结符是原子不可分的. 分类 文法的分类也就这几种了,先看各自的定义,在定

ASP.NET MVC的Razor引擎:View编译原理

通过.cshtml或者.vbhtml文件定义的View能够被执行,必须先被编译成存在于某个程序集的类型,ASP.NET MVC采用动态编译的方式对View文件实施编译.当我们在对ASP.NET MVC进行部署的时候,需要对.cshtml或者.vbhtml文件进行打包.针对某个View的第一次访问会触发针对它的编译,一个View对应着一个类型.我们可以对.cshtml或者.vbhtml进行修改,View文件修改后的第一次访问将会导致View的再一次编译.和ASP.NET 传统的编译方式一样,针对V

大前端开发者需要了解的基础编译原理和语言知识

在我刚刚进入大学,从零开始学习 C 语言的时候,我就不断的从学长的口中听到一个又一个语言,比如 C++.Java.Python.JavaScript 这些大众的,也有 Lisp.Perl.Ruby 这些相对小众的.一般来说,当程序员讨论一门语言的时候,默认的上下文经常是:"用 xxx 语言来完成 xxx 任务".所以一直困扰着的我的一个问题就是,为什么完成某个任务,一定要选择特定的语言,比如安卓开发是 Java,前端要用 JavaScript,iOS 开发使用 Objective-C

c语言如何进阶?需不需要学操作系统和编译原理

问题描述 c语言如何进阶?需不需要学操作系统和编译原理 学了一段时间的c语言,基本知识都掌握了,想深入学习一下c语言,不知道需不需要先学习一下操作系统方面的知识或者编译原理,请高手指点一下 解决方案 C语言是一种系统编程语言,有人称它叫做"高级语言中的低级语言",由于它接近硬件,语法相对简单,并且自身抽象程度很差,不适合编写应用程序,而很适合编写系统软件,比如微控制器.嵌入式系统.驱动程序等等. 这恰好是操作系统和编译原理的学习中最适合的语言.C语言接近硬件,接近操作系统,天然地,和操

深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)

Microsoft 的Visual Studio为我们在应用开发中提供的强大功能,我们是有目共睹.借助该工具,是我们的开发 显得更加高效而轻松.从Microsoft把这个IDE的名字从VS.NET 该为VS(比如原来的Visual Studio.NET 2003,现在的版本叫VS2005),可以MS对该IDE的期望和野心:MS要把它改造成一个万能的IDE.不过任何都有其两面性,对于我们广大的开发者来说,VS是我们的各种行为简单化,傻瓜化:但是在另一方面,他也会蒙蔽我们的眼睛,使我们对它背后做的事