c 语言软链接函数,C++/C链接过程详解

2023-10-27

头文件可以被多个编译单元包含,如果头文件里有定义,那么每个包含这个头文件的编译单元就都会对同一个符号

进行定义,如果该符号为外部链接,则会导致duplicated external simbols。因此如果头文件里要定义,必须保证定义的符号只能具有内部链接。*********为什么常量默认为内部链接,而变量不是*********这就是为了,能够在头文件里如const int n = 0这样的定义常量。由于常量是只读的,因此即使每个编译单元都拥有一份定义也没有关系。如果一个定义于头文件里的变量拥有内部链接,那么如果出现多个编译

单元都定义该变量,则其中一个编译单元对该变量进行修改,不会影响其他单元的同一变量,会产生意想不到的后果。*********为什么函数默认是外部链接*********虽然函数是只读的,但是和变量不同,函数在代码编写的时候非常容易变化,如果函数默认具有内部链接,则人们会倾向于把函数定义在头文件里,那么一旦函数

被修改,所有包含了该头文件的编译单元都要被重新编译。另外,函数里定义的静态局部变量也将被定义在头文件里。为什么类的静态变量不可以就地初始化:所谓就地初始化就是类似于这样的情况:class A { static char msg[] =

"aha"; };不允许这样做得原因是,由于class的声明通常是在头文件里,如果允许这样做,其实就相当于在头文件里定义了一个非const变量。在C++里,头文件定义一个const对象会怎么样:一般不会怎么样,这个和C里的在头文件里定义const int一样,每一个包含了这个头文件的编译单元都会定义这个对象。但由于该对象是const的,所以没什么影响。但是:有2种情况可能破坏这个局面:1。如果涉及到对这个const对象取地址并且依赖于这个地址的唯一性,那么在不同的编译单元里,取到的地址可以不同。(但一般很少这么做)2。如果这个对象具有mutable的成员变量,某个编译单元对其进行修改,则同样不会影响到别的编译单元。为什么类的静态常量也不可以就地初始化:???????因为这相当于在头文件里定义了const对象。作为例外,int/char等可以进行就地初始化,是因为这些变量可以直接被优化为立即数,就和宏一样。内联函数:C++里的内联函数由于类似于一个宏,因此不存在链接属性问题。为什么公共使用的内联函数要定义于头文件里:因为编译时编译单元之间互相不知道,如果内联函数被定义于.cpp文件中,编译其他使用该函数的编译单元的时候没有办法找到函数的定义,因此无法对函数进行展开。所以说如果内联函数定义于.cpp文件里,那么就只有这个cpp文件可以是用这个函数。头文件里内联函数被拒绝会怎样:如果定义于头文件里的内联函数被拒绝,那么编译器会自动在每个包含了该头文件的编译单元里定义这个函数并且不导出符号。如果被拒绝的内联函数里定义了静态局部变量,这个变量会被定义于何处:早期的编译器会在每个编译单元里定义一个,并因此产生错误的结果,较新的编译器会解决这个问题,手段未知。为什么export关键字没人实现:export要求编译器跨编译单元查找函数定义,使得编译器实现非常困难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c 语言软链接函数,C++/C链接过程详解 的相关文章

  • C++拷贝构造函数、赋值构造函数(深拷贝,浅拷贝)

    一 拷贝构造函数 拷贝构造函数是一种特殊的构造函数 函数的名称必须和类名称一致 它的唯一的一个参数是本类型的一个引用变量 该参数是const类型 不可变的 例如 类X的拷贝构造函数的形式为X const X x 自定义拷贝构造函数是一种良好
  • 【AntDB数据库】如何快速入门AntDB数据库?(二)

    AntDB数据库的硬件配置要求及安装包下载说明 硬件配置要求 组件 CPU 内存 本地存储 网络 mgr 16核 32G SAS 千兆网卡 gtmcoord 32核 64G SSD 万兆网卡 coordinator 32核 64G SSD
  • Linux 文件系统只读

    一般在SD卡或者U盘使用的是FAT32文件系统 当Linux下写FAT32文件系统时可能会出现 只读文件系统的错误 导致变为只读文件系统的原因是在操作FAT32文件系统的之后发生过致命的错误 然后系统以只读的方式重新挂载 remount r
  • 管理者工具箱--用最佳策略和资源,留住您最优秀的人才

    近年来 离职跳槽之风盛行 但多数员工打心底里是不会轻易离开一个培养了自己多年 又能满足职业发展需求的环境的 作为管理者 您处于一个有利的位置 应努力打造一支能长期并肩合作的稳固的团队 领英制作的这本实用指南 旨在介绍实用策略 工具和模板 帮
  • leveldb源码分析--SSTable之Compaction 详解

    http www cnblogs com KevinT p 3819134 html leveldb源码分析 SSTable之Compaction 对于compaction是leveldb中体量最大的一部分 也应该是最为复杂的部分 为了便于
  • Conda——报错解决:CondaError: Cannot write to /.condarc Caused by PermissionError(13, ‘Permission denied‘)

    报错详情 解决方法 sudo chown R pc home pc condarc sudo chown R pc home pc anaconda3 pc 替换你的用户名 home pc anaconda3替换为你的anaconda路径
  • 基础算法题——牛牛的棋盘(容斥原理)

    容斥原理 一种计数方法 先不考虑重叠的情况 把包含于某内容中的所有对象的数目先计算出来 然后再把计数时重复计算的数目排斥出去 使得计算的结果既无遗漏又无重复 题目 牛客网 牛牛最近在家里看到一个棋盘 有 n m 个格子 在棋盘旁边还放着 k
  • SpringBoot学习路线

    SpringBoot 第一章Xml和JavaConfig 1 为什么要使用springboot 因为spring springmvc需要使用大量的配置文件 xml文件 还需要配置各种对象 把使用的对象放入到spring容器中才能使用对象 需
  • 【mysql基础知识】查询当前时间之前5分钟内的数据

    通过sql语句查询与当前时间相隔5分钟以内的数据 select from 数据表名 where 字段名 between date add now interval 5 minute and now 字段名是字符串格式 也是可以的
  • 数据仓库架构

    这节来说说数据仓库的架构 关于架构并没有一个统一的标准 按照数据量以及使用环境可以搭建适合当下场景的数据仓库 下面主要是介绍比较大众或者说比较通用的数据仓库架构 传统的数据仓库架构按层级可分为 ETL ODS DWD DWS 和 ADS 五
  • JDBC java连接数据库

    JDBC编程六步 注册驱动 告诉java程序 即将连接那个品牌的数据库 Driver driver new com mysql jdbc Driver DriverManager registerDriver driver 或 class
  • Maven的scope=import

    详解内容 maven有个核心文件 名曰pom xml 这个文件中的标签 简直是眼花缭乱 千姿百态 而标签中的值也非常之多 今天我们就scope标签其中一个值import 讲解一番 scope标签的作用 这里不作过多的赘述 不明白的小伙伴 可
  • 基于跳数,时延,带宽的最短/优路径和负载均衡

    基于跳数的最短路径转发 基于跳数的最短路径转发是最简单的最优路径转发应用 我们通过network awareness应用来实现网络拓扑资源的感知并计算最短路径 首先控制器通过下发LLDP报文来获取网络链路信息 然后再利用网络信息 生成网络拓
  • sklearn决策树预剪枝

    老饼讲解机器学习 http ml bbbdata com teach 102 目录 一 预剪枝即调参 二 调参方法 1 默认值预观察生长的树 2 参数限制节点过分生长 为预防模型过拟合 我们可以采用预剪枝和后剪枝方法 1 预剪枝 树构建过程
  • git错误pathspec did not match any file(s) known to git及相关操作

    git error pathspec did not match any file s known to git 本地文件与远程无对应 我这里的情况是在执行 update nrp update all git pull Already up
  • python 连接minio并上传目录及文件

    目录 python sdk安装 python 代码 python sdk安装 python需要3 7及以上版本 pip3 install minio python 代码 from minio import Minio from minio
  • web服务器设置默认网站,web服务器中默认首页和默认网站的配置(以apache服务器为例)...

    默认首页的配置 php 第一种 直接修改apache服务器的配置文件 conf httpd conf中的DirectoryIndex 如 项目web以index php为首页 html DirectoryIndex index html i
  • Python追加文件内容

    Python追加文件内容 测试中需要造几百个账号 写了个脚本可以自动生成账号 但想把生成的账号写入一个文件 开始用的如下的write 方法 发下会先把原文件的内容清空再写入新的东西 文件里面每次都是最新生成的一个账号 mobile Meth
  • c++调用libcurl示例

    include

随机推荐

  • 【STM32】STM32存储映射

    存储映射 stm32f40xx的存储映射图 这幅图很重要 至于为什么 我还没编好 STM32存储空间有多大 芯片能访问的存储空间有多大 为什么 这个是由芯片内 CPU 的地址总线的数量决来定的 STM32 芯片内部的地址总线为32 根 1根
  • flutter开发实战-实现marquee根据文本长度显示文本跑马灯效果

    flutter开发实战 实现marquee文本跑马灯效果 最近开发过程中需要marquee文本跑马灯效果 这里使用到了flutter的插件marquee 效果图如下 一 marquee 1 1 引入marquee 在pubspec yaml
  • 第一课:VxWorks系统概述

    目录 1 1 VxWorks系统简介 1 2 VxWorks的特点 1 3VxWorks系统和Linux系统的区别 1 4 VxWorks开发环境获取 1 1 VxWorks系统简介 VxWorks 操作系统是美国WindRiver公司于1
  • matlab中如何对一个小数取整,学习笔记153—matlab中小数如何取整?

    matlab中小数取整的函数大约有四个 floor ceil round fix 1 round取整方法是四舍五入 round函数功能 四舍五入取整 使用方法 B round A 对数组A中每个元素朝最近的方向取整数部分 并返回与A同维的整
  • 在微信小程序中如何使用wx.onLocationChange(function callback)

    参考文档 点这里 其实我使用这个挨批之前用的是wx getLocation文档点这里 可是很无奈 产品的需求是要从首页点进去的时候获取一次用户坐标 可是如果用户频繁点击在真机上就会出现获取不到的情况 会报以下的错误 如下图所示 所以很尴尬
  • 【python基础】【pandas】读取数据pd.read_csv、列表切片iloc、转换成数组to_numpy

    读取数据保存到data中 路径根据你保存的train csv位置而有变化 big5 是专门针对台湾繁体的 data pd read csv D pycharm HungYiLiData hw1 train csv encoding utf
  • 递归的方法对字符串逆序

    对于字符串逆序 简单的说就是把字符串倒过来 比如说 abcdef 将它逆序后就变成 fedcba 这看起来是多么的简单易懂 但是一旦放到代码中 思维可就要加强十倍了 include
  • 分配学号python

    with open studentList csv mode r encoding utf 8 as stuData lsStu line strip split for line in stuData with open schoolCo
  • 【100%通过率 】【华为OD机试 c++/python】猜字谜【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 小王设计了一个简单的猜字谜游戏 游戏的谜面是一个错误的单词 比如nesw 玩家需要猜出谜底库中正确的单词 猜中的要求如下 对于某个谜面和谜底单词
  • 零日漏洞

    点击上方 订阅话题 第一时间了解漏洞威胁 0x01 漏洞描述 Windows Print Spooler是Windows的打印机后台处理程序 广泛的应用于各种内网中 360漏洞云监测到微软最新披露了一个新的Windows Print Spo
  • 解决C++调用python传递中文路径的问题

    背景 最近在做使用C 调用python代码来进行图像处理 需要传入一个图像文件的路径 使用 char picPath E pic jpg PyObject path Py BuildValue s picPath 来生成图像路径的pytho
  • PAT 1072 开学寄语(20)(代码+思路)

    1072 开学寄语 20 分 下图是上海某校的新学期开学寄语 天将降大任于斯人也 必先删其微博 卸其 QQ 封其电脑 夺其手机 收其 ipad 断其 wifi 使其百无聊赖 然后 净面 理发 整衣 然后思过 读书 锻炼 明智 开悟 精进 而
  • python监视mysql最大连接数

    usr local bin python3 5import pymysqlimport time sum 0 while True open db connection db pymysql connect localhost root a
  • You can‘t specify target table ‘XXXX‘ for update in FROM clause mysql错误解决方法

    mysql数据库同时对一个表进行查询和删改操作时 会报 You can t specify target table XXXX for update in FROM clause 错误 无法执行 错误提示的意思是 不能在 FROM 子句中指
  • 2022年度回顾

    2022年接近尾声 驻足回看行业这一年的跌宕起伏 无论是技术的突破 应用的创新 还是生态的兴衰 皆成为了行业发展的历史注脚 如往年一样 万向区块链于年末推出重磅年度回顾系列文章 公链技术篇 应用篇 和 监管篇 以期记录当前行业发展的缩影 下
  • Java快捷键(学到会慢慢更新)

    大家都知道快捷键的重要性 尤其在代码中 懂得运用快捷键的小伙伴写代码速度就是快 目前我学Java还不是很久 之前学c的 所以所知道的快捷键比较少 后续会一直更新这条博文 第一个快捷键 psvm 回车 这是main函数快速生成快捷键 具体还是
  • 顺序表的基本操作

    目录 一 实验要求 二 代码实现 三 运行结果 一 实验要求 1 验证性实验 实现顺序表的基本操作 实验内容 编写一个程序sqlist cpp 或 c 实现顺序表的各种基本运算和整体建表算法 假设顺序表的内容类型ElemType为char
  • Git-常用命令

    系列文章 Git 入门小结 Git 分支 Git 常用命令 Git 注册远程仓库 1 提交代码到暂存区 git add 添加当前目录的所有文件到缓存区 git add file1 file2 添加指定文件到缓存区 git rm file1
  • 1分钟学会在C++中将图像转换为Word文档,快速入手光学字符处理控件Aspose.OCR

    图像和扫描的文档可能包含您可能需要进一步处理的文本信息 可能已经使用智能手机拍摄了文本文档的图片 并将其转换为可编辑的文档 为此 对图像执行 OCR 可以证明是有帮助的 使用 OCR 可以将图像转换为可搜索和可编辑的 Word 文档 为此
  • c 语言软链接函数,C++/C链接过程详解

    头文件可以被多个编译单元包含 如果头文件里有定义 那么每个包含这个头文件的编译单元就都会对同一个符号 进行定义 如果该符号为外部链接 则会导致duplicated external simbols 因此如果头文件里要定义 必须保证定义的符号