导航:首页 > 源码编译 > 编译时期确定

编译时期确定

发布时间:2023-03-30 23:22:24

编译程序出现在计算机时期的什么时候

编译程序出现的计算机时期是:第二代
编译程序(Compiler,compiling program)也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。编译程序属于采用生成性实现途径实现的翻译程序。它以高级程序设计语言书写的源程序作为输入,而以汇编语言或机器语言表示的目标程序作为输出。编译出的目标程序通常还要经历运行阶段,以便在运行程序的支持下运行,加工初始数据,算出所需的计算结果。
20世纪80年代以后,程序设计语言在形式化、结构化、直观化和智能化等方面有了长足的进步和发展,主要表现在两个方面:①随着程序设计理论和方法的发展,相继推出了一系列新型程序设计语言,如结构化程序设计语言、并发程序设计语言、分布式程序设计语言、函数式程序设计语言、智能化程序设计语言、面向对象程序设计语言等;②基于语法、语义和语用方面的研究成果,从不同的角度和层次上深刻地揭示了程序设计语言的内在规律和外在表现形式。与此相应地,作为实现程序设计语言重要手段之一的编译程序,在体系结构、设计思想、实现技术和处理内容等方面均有不同程度的发展、变化和扩充。另外,编译程序已作为实现编程的重要软件工具,被纳入到软件支援环境的基本层软件工具之中。因此,规划编译程序实现方案时,应从所处的具体软件支援环境出发,既要遵循整个环境的全局性要求和规定,又要精心考虑与其他诸层软件 工具之间的相互支援、配合和衔接关系。

⑵ c++ 数组大小必须在编译时确定 请教

数模袜组大小必须在编译时确定
这句话是对的。

动态数组实际上并不是一个严格意义上的数旦没激组,
它是先声明一个指针,再以它只想一个后来分配的连续存储空间。
这个实际上是一个连续存储的链表的实现。

所以就严格的数组的概念察做来说的话,
数组大小必须在编译时确定,
这句话是对的。

⑶ visual studio 如何在编译期确定字串长度,特殊宏之类的

宏的作用,只是在编译期间完成替代,并不能实现计算。因此不要考虑宏实现,这个没什么可行性。

编译期间数羡胡槐值确定,其实可以通过const关键字实现,但说实话,这个是“消耗空间换时间”,如果有log的函数太多,太分散,并不值得。

如果log比较集中的在几个函数中,那么可以这么做:

constintfnamelen=strlen(__FUNCTION_);
log(__FUNCTION_,fanmelen);
这样,因为编译之后__FUNCTION_是一个常量,const 变量会直接从编译器的符号表中取值(做烂这个叫C++的常量折叠),不会兄友反复计算。


⑷ 为什么数组要在编译期确定大小

从变成方面来看:定义一个数组是要用到数据类型的(byte,short,int,long,float,double,char)的, 而调用这些数据类型会在堆中建立该数组的对象,如果想要这个数组有值,那就一定会在数据区开区间,建立该对象的值。所以数组如果要有意义,编译期肯定要赋值。否则虽然不会报错,但莫名其面占用存储空间总归不好。

⑸ C++ 虚函数表指针vptr什么情况下被改变

虚拟表一弯悄个类只有一个.是静态的.在Main函数之前就初始化了.你的写法有问题。关于class TEST_API CBase不能被定义两次。两个分别是不同的类.一个类只有一个虚拟表。散蚂class TEST_API CBase的定义只能有一个头文件.同时被dll和exe使用。冲闹埋

⑹ 哪一个数组表达是正确的错误的请说明一下为什么错误,我觉得B也好像是正确的。

你好!!
A s2[4,3]的声明是错误的,没有这样的形式,要是二维数组的话应该是s2[4][3];
B int n,a[n]在c/c++中要是声明数组的时候数组的大小是常数,而此时的n是个随机数,即使:int n=3,a[n]这样都是错的,因为编译器在编译时期就检查数组的大小,而此时n的值在运行时期才确定的,要是const int n=3,a[n]才是正确的。因为此时的n是常量,在扮核编岁缺悄译时期就可乎渣以确定值。

C char st [5]="A" 是正确的,给字符数组赋值就是“”的形式而不是‘’,要是C char st [5]=’A‘,就错了

D int x(10),y(10) 也是对的,等价于D int x=10,y=10

⑺ 编译原理:静态数组的存储空间可以在编译时确定。这句话为什么是错的。请给出详细原因,谢谢。

静态变量在程序运行过程中只在第一次初始化时,会赋初始值,以后即使再初始化其值也不会改变。
任何变量的存储空间及存储在内存中的位置都是由操作系统在程序运行时才分配的,只能说存储空间的大小是程序里面的初始化语句决定的。
静态变量、全局变量和局部变量
1.从作用域看:
C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:
全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。
1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。
2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在,它和全局变量的区别在于全局变量对所有的函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。
3>局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
4>静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。
2.从分配内存空间看:
1>全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间
2>全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
1)全局变量、静态全局变量以及静态局部变量都会被放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它们与堆变量、堆变量的区别。
2)静态变量(包括静态局部变量和静态全局变量)用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。
从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。
Tips:
A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
B.若全局变量仅由单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
C.设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时,需要考虑重入问题,因为他们都放在静态数据存储区,全局可见;
D.如果我们需要一个可重入的函数,那么,我们一定要避免函数中使用static变量(这样的函数被称为:带“内部存储器”功能的的函数)
E.函数中必须要使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

阅读全文

与编译时期确定相关的资料

热点内容
pdf火车 浏览:77
幻世九歌怎么选服务器 浏览:163
ubuntu反编译工具使用方法 浏览:910
stc20脚单片机 浏览:352
pdf吉他独奏 浏览:484
phpsort排序 浏览:917
三种条件编译指令 浏览:945
怎么知道app扣的啥费用 浏览:320
没有服务器地址测试微信接口 浏览:392
51单片机报警器 浏览:431
python任意范围猜数字游戏 浏览:567
程序员打电话搞笑视频 浏览:129
完美校园app怎么销假 浏览:902
多开宏命令 浏览:884
战地1如何匹配官方服务器 浏览:382
武汉金税系统服务器地址 浏览:844
店铺app源码 浏览:59
android缓冲界面 浏览:274
中行企业银行app怎么开通转账 浏览:96
飞乐鸟水彩画入门pdf 浏览:966