返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言链接属性怎么应用
  • 526
分享到

C语言链接属性怎么应用

2023-06-29 13:06:37 526人浏览 独家记忆
摘要

小编给大家分享一下C语言链接属性怎么应用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是链接属性链接属性与C语言中各个目标文件及函数的链接过程有关,用于认定不

小编给大家分享一下C语言链接属性怎么应用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    什么是链接属性

    链接属性与C语言中各个目标文件及函数的链接过程有关,用于认定不同文件的标识符(即程序中定义的各种名称,包括变量名、函数名)是否是同一个实体。更通俗地说,就是在两个不同文件中的变量、函数声明是否指向同一个实体。比如:a、b文件同时声明了变量c,链接属性就指定了这两处变量c是否是同一个c。

    简单来说,链接属性的作用就是让你能在a文件中决定要不要访问b文件中的变量、函数。

    链接属性的分类

    链接属性有三种:

    • external - 外部链接

    • internal - 内部链接

    • none - 无链接

    对于external属性的标识符,不同文件中出现的多个同名称标识符指向同一个实体。在C语言中,用extern关键字在声明中指定以引用其他文件中定义的相同标识符

    对于internal属性的标识符,仅在当前文件内该标识符指向同一个实体。在C语言中,用static关键字在声明中指定让标识符变为该文件私有(只有对原本缺省的链接属性为external的标识符,才能用static关键字改变其链接属性为internal)。

    对于none属性的标识符,在每个声明位置都是一个新的实体。C语言中,没有对应的关键字。

    默认的链接属性

    标识符的默认的链接属性与其出现的位置有关。

    • 程序的全局变量、所有函数默认的链接属性为external。

    • 其余标识符的默认链接属性为none。

    在以下例子中,b、c、f的链接属性就是external:

    typedef char *a;int b;int c(int d){int e;int f(int g);}

    实践应用

    extern

    在a文件中想要使用b文件中定义的external属性标识符,可使用extern关键字在a文件中声明。

    即使该标识符所在位置默认链接属性为external,也建议使用extern关键字显式说明,有利于增加程序可读性。

    static

    在a文件定义了一个全局标识符,但不想被其他文件访问,可以对该标识符加上static关键字。

    在a、b文件中定义了同样的标识符,通过static关键字可以避免多重定义问题。

    再次提醒:只有对原本缺省的链接属性为external的标识符,才能用static关键字改变其链接属性为internal

    一些细节

    • 对于external属性的标识符,你可以在多个不同源文件中声明,但是你只能在一处初始化。否则就会出现重复定义的问题:multiple definition of 'a';

    • extern关键字声明的标识符用于访问其他文件中定义的同名的标识符,因此无法进行初始化。如果你对extern声明的变量进行初始化就会生成警告:warning: ‘a’ initialized and declared ‘extern’

    • 如果在其他文件中不存在相应的标识符定义,却在当前文件中使用了extern声明,会报错:undefined reference to 'a',原理同2。

    • external属性的标识符总是静态存储类型。

    • static关键字还有改变存储类型的作用,因此,其作用与上下文环境有关,只有对于默认链接属性为external的标识符,才有改变链接属性的作用。

    • c++中,const变量隐含的具有internal属性,C中并不具有这一性质。

    思考题

    internal和none属性除了作用域不同还有什么区别?

    以下代码一定程度上阐释了部分区别:

    static int i; // definition              // static storage              // internal linkagevoid f(void){    extern int i; // declaration                  // refers to the static i at file scope                  // note that even though the specifier is extern                  // its linkage is intern (this is legal in both C/C++)    {        int i; // definition               // automatic storage               // no linkage    }}

    实际上链接属性和作用域是两个概念。之所以产生以上问题,因为internal属性标识符出现的位置都是在文件作用域,而none往往在代码块作用域。此处想引起读者对内链接更深入的思考,见问题2。

    文件作用域已经能让程序访问同一文件变量,那么再进行内部链接的意义在哪?

    同一个标识符在链接中只能存在一个,那么通过内部链接的方式可以隔绝同名外部链接,且限定了外部编译单元不能访问该文件全局标识符。

    a.c:

    #include <stdio.h>static int a=3;int main(void){    extern int a;    printf("a=%d\n", a);    return 0;}

    b.c:

    int a=1;

    编译后结果为:

    a=3

    以上仅为不完善的个人猜想,抛开隔绝外部链接这一点不谈,就内部链接这一名称而言,笔者对为什么要在同一个文件内部使用链接的设计仍然存疑,但目前该话题的答案超出了笔者的理解,因此更深入的讨论暂时留白。

    拓展:感兴趣的同学可以尝试学习链接相关知识,或许会找到更确定的答案。

    以上是“C语言链接属性怎么应用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网其他教程频道!

    --结束END--

    本文标题: C语言链接属性怎么应用

    本文链接: https://lsjlt.com/news/325154.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • C语言链接属性怎么应用
      小编给大家分享一下C语言链接属性怎么应用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是链接属性链接属性与C语言中各个目标文件及函数的链接过程有关,用于认定不...
      99+
      2023-06-29
    • C语言链接属性的实践应用
      目录什么是链接属性链接属性的分类默认的链接属性实践应用externstatic一些细节思考题参考总结 什么是链接属性 链接属性与C语言中各个目标文件及函数的链接过程有关,用...
      99+
      2024-04-02
    • C语言中单链表怎么用
      这篇文章将为大家详细讲解有关C语言中单链表怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、单链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序...
      99+
      2023-06-29
    • C语言中二级指针与链表怎么应用
      本文小编为大家详细介绍“C语言中二级指针与链表怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中二级指针与链表怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二级指针讲解简述:其实就是一个指针...
      99+
      2023-07-02
    • C语言链接的过程是什么
      这篇“C语言链接的过程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言链接的过程是什么”文章吧。一、链接器的意义连...
      99+
      2023-06-30
    • C语言外部链接的静态变量怎么使用
      这篇文章主要介绍“C语言外部链接的静态变量怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言外部链接的静态变量怎么使用”文章能帮助大家解决问题。外部链接的静态变量具有文件作用域、外部链接和...
      99+
      2023-06-27
    • 怎么用C语言实现链式栈
      这篇文章给大家分享的是有关怎么用C语言实现链式栈的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。堆栈的基本概念堆栈是只能在一端增删元素的表结构,该位置称为栈顶堆栈的基本运算是压入和弹出,前者相当于插入,而后者则是删...
      99+
      2023-06-22
    • C语言线性表的线性链表是什么
      这篇文章主要介绍“C语言线性表的线性链表是什么”,在日常操作中,相信很多人在C语言线性表的线性链表是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言线性表的线性链表是什么”的疑惑有所帮助!接下来,请跟...
      99+
      2023-06-29
    • c语言单链表怎么写
      单链表是一种线性数据结构,由节点组成,每个节点包含数据和指向下一个节点的指针。在 c 语言中,它可以用 struct 定义节点,并用指针表示链表。基本操作包括:创建链表在头部或末尾插入元...
      99+
      2024-05-21
      c语言
    • C语言链表有什么用
      这篇文章将为大家详细讲解有关C语言链表有什么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链表的概念及结构概念链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次...
      99+
      2023-06-25
    • 怎么区分作用域,存储器,链接属性
      本篇内容介绍了“怎么区分作用域,存储器,链接属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!作用域C语言中,作用域用来描述标识符能够被哪些...
      99+
      2023-06-15
    • C语言怎么实现线性动态单向链表
      本篇内容主要讲解“C语言怎么实现线性动态单向链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现线性动态单向链表”吧!什么是链表链表是数据结构里面的一种,线性链表是链表的一种,线性链...
      99+
      2023-06-30
    • c语言是属于什么语言
      c++kquote>c语言是一种高级程序设计语言。其优点包括可读性高、跨平台兼容、开发效率高。c语言具备结构化、强类型、指针使用和高效性等特性,应用于操作系统开发、嵌入式系统编程、...
      99+
      2024-04-13
      python c语言 c++ 网络编程 c#
    • C语言中怎么实现链栈
      这篇文章将为大家详细讲解有关C语言中怎么实现链栈,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。链栈图解链栈的常规操作LinkStack  InitLinkStack();// ...
      99+
      2023-06-15
    • C语言链表是怎么样的
      这篇文章将为大家详细讲解有关C语言链表是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.链表概况1.1 链表的概念及结构概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序...
      99+
      2023-06-29
    • C语言双链表怎么实现
      本篇内容介绍了“C语言双链表怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义链表是通过一组任意的存储单元来存储线性表中的数据元素,...
      99+
      2023-06-29
    • C语言 超详细讲解链接器
      目录1 什么是链接器2 声明与定义3 命名冲突3.1 命名冲突3.2 static修饰符4 形参、实参、返回值5 检查外部类型6 头文件1 什么是链接器 典型的链接器把由编译器或汇编...
      99+
      2024-04-02
    • C语言单双线性及循环链表怎么实现
      今天小编给大家分享一下C语言单双线性及循环链表怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。链表思维顺序存储结构Op...
      99+
      2023-07-05
    • c语言属于一种什么语言
      c语言属于系统编程语言,其特点包括直接硬件访问、低级内存管理和高效紧凑,用于开发操作系统、设备驱动程序等低级软件。 C语言属于一种什么语言? C语言属于一种系统编程语言。 什么是系统编...
      99+
      2024-04-13
      c语言
    • C语言线性表之双链表详解
      目录定义1.删除2.插入3.建立4.查找总结定义 链表是通过一组任意的存储单元来存储线性表中的数据元素,每一个结点包含两个域:存放数据元素信息的域称为数据域,存放其后继元素地址的域称...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作