导航:首页 > 源码编译 > 在编译过程中声明属于哪个过程

在编译过程中声明属于哪个过程

发布时间:2022-07-23 09:45:28

㈠ 请问C语言中所谓的函数声明是指什么为什么要进行声明什么叫做函数声明

举个例子来说明吧
void foo();

int main()
{
foo();
}

void foo()
{
;
}

以上代码中,第一句就是所谓函数声明。
其实直接用函数定义也就是void foo(){;}替代第一句也是可以的,不过函数的声明让你可以在定义它的代码段之前使用它。

比如以上的例子中,在编译进行到main函数中的foo调用的时候,foo函数还是没有定义的,但我们通过foo的声明告诉了编译器:foo是一个函数的名字,这个函数有着怎样怎样的参数表等等。

㈡ 类的声明和类的实现

问题好罗嗦 首先看出来你对类和对象分的就不太清楚,类是虚拟的 比如人类 而对象却是现实存在的 是类的一个实例 人就是人类一个实例 人具有人类的一切属性和行为 对象也一样 对象拥有类的一切属性和方法. 编译器只是把代码编译解释成计算机可以识别的二进制代码,所以在内存中建立分配一个对象决不是编译器所为.是执行那一行代码时干的事. 它会为类迅速分配一个空间称为这个类的实例 就是对象 而对象名就是它的首地址 所以通过对象名可以访问它成员 就是用到计算机所谓的偏移量方法. 当创建一个对象时会自动的调用它的构造方法 注意并不是构造方法构造对象的哟 它只是对对象做一些初始化 类自建请查类信息表

㈢ C语言文件的编译与执行的四个阶段并分别描述

开发C程序有四个步骤:编辑、编译、连接和运行。

任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。

1、预处理:导入源程序并保存(C文件)。

2、编译:将源程序转换为目标文件(Obj文件)。

3、链接:将目标文件生成为可执行文件(EXE文件)。

4、运行:执行,获取运行结果的EXE文件。

(3)在编译过程中声明属于哪个过程扩展阅读:

将C语言代码分为程序的几个阶段:

1、首先,源代码文件测试。以及相关的头文件,比如stdio。H、由预处理器CPP预处理为.I文件。预编译的。文件不包含任何宏定义,因为所有宏都已展开,并且包含的文件已插入。我归档。

2、编译过程是对预处理文件进行词法分析、语法分析、语义分析和优化,生成相应的汇编代码文件。这个过程往往是整个程序的核心部分,也是最复杂的部分之一。

3、汇编程序不直接输出可执行文件,而是输出目标文件。汇编程序可以调用LD来生成可以运行的可执行程序。也就是说,您需要链接大量的文件才能获得“a.out”,即最终的可执行文件。

4、在链接过程中,需要重新调整其他目标文件中定义的函数调用指令,而其他目标文件中定义的变量也存在同样的问题。

㈣ c语言中,声明和定义有什么区别

如果是指变量的声明和定义:

从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。
对于下面的两句代码:
void Func()
{
int a;
int b=1;
a=0;
}
对于第一行代码,编译器不会做任何事,它不会为它在栈中分配一点东西,直到第三句,a=0;时,编译器才会将其压入栈中。而对于int b=0;这一句,编译器就会生成一条指令,为它赋值。如果反汇编,看到的代码可能是这样的:
push 1;
push 0;
当然,并不一定编译器就会样做,也有可能在声明int a时,编译器就会把一个废值入栈,到第三条再为其赋值,这要看编译器的具体取舍,所以,声明不一定不是定义,而定义一定是定义。
但是,下面的声明,一定仅仅是声明:
extern int a;
这表时,有一个int变量a,它一定是在另外其他地方定义的,所以编译器此时一定不会做什么分配内存的事,因为它就是声明,仅仅表明下面的代码引用了一个符号,而这个符号是int类型的a而已。

如果是指函数的声明和定义:

声明:一般在头文件里,对编译器说:这里我有一个函数叫function() 让编译器知道这个函数的存在。

定义:一般在源文件里,具体就是函数的实现过程 写明函数体。

㈤ 在C语言中声明和定义有什么区别

C语言变量的定义和声明的不同之处:

1、变量在使用前就要被定义或者声明;

2、在一个程序中,变量只能定义一次,却可以声明多次;

3、定义分配存储空间,而声明不会

(5)在编译过程中声明属于哪个过程扩展阅读:

变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。在程序中,变量有且仅有一个定义。

声明:用于向程序表明变量的类型和名字。

定义也是声明:当定义变量的时候我们声明了它的类型和名字。可以通过使用extern声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。

extern声明不是定义,也不分配存储空间。事实上它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。

只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。

任何在多文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。

㈥ 编译器在编译的时候做了什么给申明的变量分配内存

第一是将java文件编译成字节码文件 就是class文件 给jvm执行
第二就是分配常量池 就是给你代码里面的变量和方法分配空间

㈦ 问一个vc++编程的问题,编译程序如何处理类的声明语句和类的对象定义句

编译只是生成目标文件,只有当这个可执行程序运行起来,才有所谓的空间分配。而目标文件本身只是相当于一个指导者,告诉操作系统要怎么来执行我的命令。比如说:我在程序里定义了一个全局的变量a,并且将它初始化了;又定义了一个全局变量b,但是没有初始化它;还有局部变量c;那么程序是怎么运行的呢?首先我们的目标文件是被放在叫做text segment(程序段)的内存段中,它是只读不可被修改的,程序的运行就是靠cpu从这个程序段中一条一条的读取命令来执行的。它看见了a,于是在initialized data segment(初始化了的数据段)开辟空间给a用;看见b,于是在uninitialized data segment(未初始化的数据段)开辟空间给b用;然后就开始执行我们的main了,看见了c,会在stack(栈)中开辟空间给c用,如果是new出来的对象是在heap(堆)分配空间。
类的一个对象和普通的int类型的数在本质上是一样的,一个类就相当于int这样的类型,只不过是用户定义的罢了,所以,如果不是全局变量,那么它的空间分配是在程序执行的过程中分配的,而不是像全局变量那样是在程序执行之前分配的。编译器分配空间的说法是不准确的,只能说是在编译的时候规划好这个变量需要多少空间,只有cpu真正执行到这条语句时才会分配。而且构造函数的功能也不是分配空间啊,而是给对象的空间做初始化。
例如:
int main()
{
...
A a(3);// no.1
...//no.2
}
cpu运行到no.1这里,“啊,需要在stack中分配sizeof(A)大小的空间,好,我这就分配。Ok,分配好了。
它有初始化诶,那我就去调用A的构造函数吧!好,转向代码段里A的构造函数的位置,开始读取命令执行,
。。。。A的构造函数执行完成。a也初始化好了。我又要跳回到no.2的位置继续执行命令了。”
总的来说,编译器只是决定这个变量需要多大的空间(如果它能确定的话,有些操作它就不能确定,比如new动态分配内存),真正的分配空间是在程序执行的时候才完成的。而构造函数是对这个分配了的内存做一些操作,给里面填上数据。
建议你看编译原理,操作系统的知识。
这个是我的理解,不对的大家多讨论。

㈧ C语言源程序的编译过程包括哪三个阶段

编译:将源程序转换为扩展名为.obj的二进制代码
连接:将obj文件进行连接,加入库函数等生成可执行文件
运行:执行可执行文件,有错返回修改,无错结束

㈨ 程序的编译链接过程

stdio.h 只是一个函数声明的头文件, 实现在已经编译好的库文件中,一般情况 IDE 会自动连接标准库,不需要你管。

㈩ c++在进行c编译时,为什么要声明extent c

你要知道 有的时候 需要用c编译的程序调用c++编译的库或者c++源码里面的函数和类,
但是c和c++对于函数的处理是不同的,
比如说c编译函数的话,如void fun()处理后之后可能就是fun,
然而c++的话,可能会在前面加上很多修饰的前缀,就不是fun了,可能是什么g_fun,
具体我也不清楚,
由于c和c++对函数的处理方式不同的话,你在c++写函数要让c语言可以调用,那么就要加个东西表示要按c的方式编译函数,这就是加个extern "c"了,在c++语言里面使用c方式的函数,声明的时候也要加上extern "c"告诉编译器按c的方式去查找这个函数,否则的话可能会出现链接错误,

具体的详细说明可以去查询相关资料啊。。。c++ primer 4里面的最后一章好像有点说明,讲的简单明了,可以去看看哦。。。

关于文件后缀名是c还是cpp的,在vc6和vs2008等下面都是 分别按照对应语言处理的,要让编译器只按照c语法处理的话,要把后缀改成.c的,否则默认情况.cpp的话,即使源码里面是纯c的语法,还是会按照c++处理的,所以编译方式还是c++的,就体现不出extern "c"的作用了,要想体现出作用的话,可以建立.c和.cpp的文件或者工程尝试下。。。

阅读全文

与在编译过程中声明属于哪个过程相关的资料

热点内容
程序员带娃的图片 浏览:77
迷你云服务器怎么下载 浏览:813
福州溯源码即食燕窝 浏览:232
当乐服务器怎么样 浏览:713
nc编程软件下载 浏览:382
如何限制手机app的使用 浏览:307
安卓华为手机怎么恢复桌面图标 浏览:956
我的世界电脑版服务器地址在哪找 浏览:533
违抗了命令 浏览:256
安卓如何实现拖拽放置 浏览:91
净资产收益率选股指标源码 浏览:599
血压力传感器计算公式单片机 浏览:466
全网接口vip影视解析源码 浏览:916
如何破解服务器远程密码错误 浏览:377
平安深圳app如何实名认证 浏览:500
linux网络监控软件 浏览:889
内网服务器如何上传文件 浏览:140
程序员在你心中是什么 浏览:1
苹果手机怎么找回app账号 浏览:466
房屋中介网站源码 浏览:29