当前位置:首页 » 编程语言 » c语言链接器什么作用
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言链接器什么作用

发布时间: 2022-10-25 08:17:30

‘壹’ c语言源程序文件、目标文件和可执行文件的扩展名是什么

C语言源程序文件扩展名: .c

目标文件扩展名: .obj

可执行文件扩展名: .exe

源程序:程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称为源程序。C语言源程序的扩展名为“.c”。源程序不能直接在计算机上执行,需要用“编译程序”将源程序编译为二进制形式的代码。

目标程序:源程序经过“编译程序”编译所得到的二进制代码称为目标程序。目标程序
的扩展名为“.obj”。
目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。

可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序
称为可执行程序。可执行程序的扩展名为“.exe“。

(1)c语言链接器什么作用扩展阅读:

C语言创建程序的步骤:

编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。

编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。(该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)

链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件。在windows下扩展名为.exe,Unix下无扩展名。

执行:运行程序。

IT专家网——C语言编程程序编译全过程剖析

    ‘贰’ c语言怎么用

    教你学习的方法吧
    新手如何学习C语言
    第一:一些概念。
    C语言是一门程序设计语言,有一些标准,比较重要的是ANSI C(好像是C89)和C99。
    数据结构包括逻辑结构和物理结构。逻辑结构是数据元素集合和定义在集合上的关系。物理结构是逻辑结构在计算机中的实现。
    LCC、VC、TC、GCC都是C语言编译器,一般包括集成开发环境,编译器和链接器及辅助工具
    我们书写的是C源程序,源程序通过编译器编译为中间文件,中间文件经链接器链接生成可执行文件。不同操作系统可执行文件不同。中间文件也有几个标准,微软使用的和Linux下通用的有差异。
    第二:学习什么。
    个人认为程序设计学习的重点放在数据结构的学习上,但是这种学习要有一个平台,比如C语言。
    学习C语言首先要掌握基本语法,常量、变量、类型、及顺序结构、分支结构和循环结构的意义及用法。进一步学习构造类型如指针、结构、函数的意义和用法。
    C语言提供一些标准函数以减轻程序设计工作量,这些函数我们自己也可以实现。即使不依靠函数库,只有编译器,理论上就足够了。事实上,提供的标准函数效率都很高,使用很频繁,没有自己实现的必要,所以掌握常用函数是非常必要的,但是要注意函数的适用范围。
    继续学习因人而异,应该可以独立选择了。
    第三:如何学习。
    强调多实践,C语言的学习要经常上机,多写程序才能逐步提高。

    ‘叁’ 用C语言编写一个程序: 从键盘输入 10 个整数,求出其中的最大值。

    程序:

    #include<stdio.h>

    int main()

    {

    int arr[10] = {0};

    int i = 0;

    int max = 0;

    int min = 0;

    printf("请输入10个整数:");

    for (i = 0; i < sizeof(arr)/ sizeof(arr[0]); i++)

    {

    scanf("%d",&arr[i]);

    }

    max = arr[0];

    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)

    {

    if (max < arr[i])

    {

    max = arr[i];

    }

    }

    min = arr[0];

    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)

    {

    if (min > arr[i])

    {

    min = arr[i];

    }

    }

    printf("max=%d ", max);

    printf("min=%d ", min);

    return 0;

    }

    结果:

    请输入10个整数:1 2 3 56 23 6 767 32 11 567

    max=767

    min=1

    请按任意键继续. . .

    (3)c语言链接器什么作用扩展阅读:

    编写过程分为三部分:源代码文件 ------> 目标代码文件------>可执行文件。

    用到两个组件:编译器、链接器。编译器的作用是将源代码转换为中间代码,产生中间文件。链接器将此中间代码与其他代码相结合来生成可执行文件。

    中间文件的形式有多种,一般就是将源代码文件转换为机器语言代码,将其结果放置在一个目标代码文件中。虽然目标代码文件包含机器代码文件,但是该文件还不能运行。目标文件包含源代码的转换结果,但它还不是一个完整的程序,也就是不是一个完整的可执行文件,它还需要与一些基本元素。

    目标代码文件中所缺少的第一个元素是一种叫做启动代码的东西,这个代码相当于程序跟操作系统之间的接口。所缺少的第二个元素是库例程的代码,几乎所有c程序都利用标准c库中所包含的例程,例如printf。

    而链接器的作用就是将这三部分结合在一起,并将它们存放在单个文件,即可执行文件中,这样,一个完整的可执行文件就产生了。

    ‘肆’ C语言里面"具有外部链接的静态变量"这里的"链接"是什么意思

    首先从静态变量说起. C语言里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.
    声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.
    声明内部链接的变量的方法是在代码块外面声明它并加上static限定符. 此变量是全局变量,但仅在本文件中可用.
    声明无链接的变量的方法是在代码块里面声明它并加上static限定符. 此变量是局部变量,但仅在本代码块中可用.
    例:
    #include<...........>
    int global=1; //声明外部链接的变量
    static int global2 //声明内部链接的变量
    int func()
    {
    int global=5; //声明的内部变量和全局变量重名,调用时将会隐藏全局的global;
    cout<<global; //是内部定义的global的值而不是外面的值.
    //如何引用外面的变量呢???
    cout<<::global; //可用作用域解析符(::)来说明你要输出的外面的全局变量.
    static int global3; //声明无链接的变量
    }
    int main()
    {
    extern int alobal; //在本文件中此句可选.此句的意思为你需要引用外部的变量global;
    global=8; //直接引用全局变量.
    }

    望采纳!!!!

    ‘伍’ c++ 编译器 链接器 如何运行 原理是什么

    #include "fun.cpp"
    这一句使得在编译的时候fun.cpp全文将被复制到主程序文件中,在主文件里面当然能使用了,这不是文件作用域的问题。
    至于前一个问题,你没给出程序的全文,我也看不出来。

    另外:对楼主的回复:
    你对fun.cpp也使用include的话,则fun.cpp中的内容肯定也是要复制过去的,只要你用include。(include这个保留字的含义就是告诉编译器除了读包含include这个语句的文件之外还要读取include语句包含的文件).一般来说,我们在include后面包含的都是xxxx.h这样的头文件,这是因为在头文件里面包含的都是声明而不是定义,在一个工程中声明可以重复多次但是定义(不管它在哪个文件里面定义)只能一次。像楼主这样包含fun.cpp的话肯定会导致重复定义的(fun.h和fun.cpp编译之后形成的fun.obj里面有函数的实现,main.cpp由于把fun.cpp里面的内容include进来所以里面也有函数的实现).至于加了static后为什么对这是因为static保留字限制了其后所定义的函数或变量只能在本文件中使用.
    建议楼主把主程序文件中的#include"fun.cpp"改成#include"fun.h"再试试,另外,找本书看看include和static(主要是静态全局变量而不是静态局部变量)相关的内容。

    对楼主的再次答复:.h和.cpp中包含的东西是不一样的。一般来说,.h中放置声明语句(主要是供编译器进行类型及函数原型检查),而.cpp中放置数据的定义以及函数的实现等。而#include语句只包含.h文件。这一点我不知道是不是c语言的规定,但是一般来说编程都是这样做的。

    如果不怕困难,建议你去看一本书,linker and loader 中文版+英文版,网址是:http://download.csdn.net/source/331053

    ‘陆’ c语言中,头文件是什么意思有什么用

    头文件:在C语言家族程序中,头文件被大量使用。一般而言,每个C++/C程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现。

    头文件的主要作用在于多个代码文件全局变量(函数)的重用、防止定义的冲突,对各个被调用函数给出一个描述,其本身不需要包含程序的逻辑实现代码,它只起描述性作用,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库中寻找相应的实际定义代码。

    (6)c语言链接器什么作用扩展阅读:

    对于具有外部存储类型的标识符,可以在其他任何一个源程序文件中经声明后引用,此用户完全可以将一些具有外部存储类型的标识符的声明放在一个头文件中。具体地说,头文件中可以包括:用户构造的数据类型(如枚举类型),外部变量,外部函数、常量和内联函数等具有一定通用性或常用的量。而一般性的变量和函数定义不宜放在头文件中。

    ‘柒’ C语言里的static和extern的作用是什么

    假如有三个文件:a.h, a.c, main.c
    在文件a.c中定义一个全局变量和函数:
    int i = 213;
    void print(void) { printf("print in a.c"); }
    在文件a.h中声明这个全局变量和函数:
    extern int i;// 加extern声明而不定义,指明这个变量在某处已定义,此处只是做一个说明
    extern void printf(void); // 函数原型即是声明,所以此处可以不用加extern明确这是声明
    在文件main.c中:
    #include “a.h”
    int main()
    {

    printf("%d\n", i); // 直接使用i
    print(); // 直接调用print()
    }
    ---
    如果将文件a.c中相关定义改为
    static int i = 213;
    static void print(void) { printf("print in a.c"); }
    文件a.h与main.c中内容不变
    此时编译出错,报告找不到print()函数,找不到i,这是因为static限制print()和i只能在a.c中使用。
    ===
    如果用static修饰局部变量,则该局部变量将拥有全局生命周期,即在程序执行期间都存在,且其值为上一次使用后的值。
    int print(void)
    {
    static int i = 0;

    printf("%d",i++);

    }
    不加static,每次调用print(),输出结果都是0
    加上static,每次调用printf(), 输出结果都不同,即:0,1,2,3……