站长域名查询工具哪些网站做任务可以赚钱的

news/2025/10/7 6:10:53/文章来源:
站长域名查询工具,哪些网站做任务可以赚钱的,网页与网站的区别与联系,京东的网络营销策略文章目录 0 前言1 从C语言编译说起2 重复定义错误#xff08;ODR violation#xff09;和条件编译3 内联函数inline和static inline4 总结 0 前言 最近在研究ARM内核代码时#xff0c;看到core_cm3.h中有大量的内联函数#xff0c;为此查阅了很多资料#xff0c;也和朋友讨… 文章目录 0 前言1 从C语言编译说起2 重复定义错误ODR violation和条件编译3 内联函数inline和static inline4 总结 0 前言 最近在研究ARM内核代码时看到core_cm3.h中有大量的内联函数为此查阅了很多资料也和朋友讨论了很久最后对C语言多文件编程有了一点不一样的体会对此前很多习以为常的东西也知道了这么做的原因。特写此文以作总结。 1 从C语言编译说起 在使用gcc或者g编译时直接传入c文件即可得到执行程序看似非常简单但实际有很多步骤包括预处理Preprocess编译Compile汇编Assemble链接Link四个步骤。其中所谓预处理即对带有#的语句进行处理如#include, #define以及条件编译语句#if, #ifdef, #ifndef等当然这一步也会进行删除注释等操作而编译即是将c语言编译成汇编语言汇编是基于汇编语言生成机器码链接则是链接具有函数引用关系的不同c文件。 参考链接 以上这些过程中有一些注意点 #include实际上就是将这个文件的内容复制过来所以预处理之后得到的仍然是c格式的文本文件但体积会比原来的文件大很多。既然如此岂不是理论上可以包含任何文件是的include某个c文件其实也是允许的只要复制过来不会报错就行。那为什么还要建立同名的c和h文件呢直接一个c文件不行吗这其实是考虑到C语言不能重复定义函数和变量的特性以及库文件加调用接口的这种应用场景。一般都是h文件放声明c文件放定义。至于重复定义错误的相关介绍参考后面章节。为什么需要链接简单来说只要写的代码中引用了其他文件中定义的函数就需要链接。这里需要理解一个专业名词编译实体即每一个c文件都是一个编译实体是最小的编译单位。各个编译实体在上述前三个阶段都是独立的互不影响而最后的链接阶段就是将不同编译实体给“拼接”到一块组成一个完整的执行程序。 2 重复定义错误ODR violation和条件编译 相信使用过ADC模块的都遇到过重复定义的问题即在h文件定义一个转换值的变量int ADC_value 0; 然后在main.c中包含这个h文件之后直接使用变量ADC_value这样就会报重复定义的错误。   所谓条件编译即在h文件中用这么一段代码括起来 #ifndef __FILE_H_ #define __FILE_H_// 中间是头文件的内容#endif 对于这个东西的作用网上绝大多数的描述都是防止重复包含。确实从条件编译的逻辑来看可以实现这个功能但很多人可能会将这个当作上述描述的重复定义错误的解决办法这显然是不对的。 首先需要明确函数或变量的声明是可以重复include的如果h文件中只有声明那完全可以多次include的那为什么现在的库文件中h文件中都会有上述的条件编译代码呢确实是防止重复包含但最终目的不是避免报错而是加快编译速度。 参考链接 举个例子有一个库func.c, func.h包含了stdio.h然后main.c包含了func.h但是出于编写习惯main.c中也会包含stdio.h也就是说最后在编译main.c时就包含了两次stdio.h文件如果stdio.h文件中没有条件编译那么它就会被包含两次虽然不会报错但会影响编译的速度而且这种库数量越多影响越大。 那重复定义到底是怎么回事呢如果在h文件中定义全局变量那么包含该h文件的c文件也就定义了一个全局变量因为include是完全复制编译器在编译该c文件时这个变量就会被存放在全局/静态区。同理假如该h文件也被其他c文件包含那么其他包含该h文件的c文件也会这么干因为不同c文件在预处理编译和汇编这三个阶段生成目标文件阶段是独立的。到这各个c文件都可以被正常编译不会报错但是在最后链接阶段时编译器就会发现全局/静态区存在相同的变量定义由此报错。 总结来说防止重复包含是在前三个阶段是同一个编译单元编译时的考虑而重复定义是不同编译实体之间在第四个阶段链接过程中的问题。因此防止重复包含并不能解决重复定义的问题。 所以对于全局变量建议采用的方式就是头文件中只声明extern int a;定义放在同名的c文件中这样即使有不同的编译实体包含了该头文件也只是包含了声明没有变量定义这样在链接阶段就不会出现重复定义的问题。 3 内联函数inline和static inline inline这个关键词比较复杂它在不同C语言版本不同编译器c和c中的含义都不尽相同所以在使用前一定要了解编译环境。 所谓内联函数指调用时没有普通函数调用时的堆栈压入和弹出的步骤而是将函数展开直接执行内部的代码。内联函数的好处在于减少了函数出入栈的操作代码执行效率更高但同样也有缺点那就是每调用一次都需要复制一遍函数的代码空间成本更高所以内联函数一般只适用于比较简短的代码。 另外inline关键词只能建议该函数内联调用但最终是否调用仍然取决于编译器所以就有可能会内联失败。对于这个问题在c中一般编译器会将该函数自动转换成普通函数且只保留一份定义然后正常调用从而保证不会出错。比如在func.h文件中定义一个内联函数但由于函数内容太长或者其他原因内联失败了那么编译器可能会自动创建一个func.c文件原来没有不一定是这个名字然后在这个文件中生成该内联函数的定义原func.h文件中的定义就只有声明的作用从而转换成普通函数。 参考链接 但是以上是c的处理方式可以保证内联的函数有且仅有一份定义但这并不适用于C语言。先来看一个vscode中的例子 test.c #include stdio.hinline void func() {printf(Hello World!\n); }int main(void) {func();return 0; }点击编译运行发现会报错undefined reference to func ... error: ld returned 1 exit status 但是如果将文件改成cpp同样的代码就不会报错。这看起来好像是C语言编译器的问题在这篇博客中介绍了一种办法就是在函数前再加上static关键词进行修饰这也就是后面要提到的static inline联合使用的问题暂且按下不表。 为解决这个问题尝试在编译时开启优化执行gcc -O1 test.c -o run_c; ./run_c结果发现竟然正常输出了Hello World换成O2O3也都正常。默认为O0不开启优化 由此可知如果有inline函数必须要考虑编译优化等级的问题。 static inline 再来看看这个static inline在介绍之前首先介绍一下static关键词。 对于static关键词在我之前的一篇博客中有详细介绍。简单来说修饰变量时表示该变量为静态变量存放在静态区比如函数中如果使用了静态变量那么它在内存中的地址就是固定的全局变量加不加static修饰其实差别不大修饰函数时表示该函数只能被当前文件访问不能被其他文件访问常用于库的内部函数不开放对外接口。 对于修饰函数的情况static可以起到隔绝作用域的功能。比如在两个c文件中定义同名函数且都用static修饰如下所示 这样是可以正常编译运行的。两个test函数虽然一样但由于被限制在各自的文件中所以不会造成冲突。 那为什么inline还要加上static呢如前所述inline关键词只能建议编译器将该函数内联展开如果成功那么即使内联函数定义所在的文件被多次包含也可以正常编译运行举个例子 这个例子中io.h中定义了一个内联函数另外有两个c文件包含了该h文件且调用了该内联函数可以正常编译运行。 但考虑到inline可能会失败而且C语言的编译器在这方面又没有c那么智能可以自动实现只保留一份定义避免ODR Violation。那么就需要加上static这样每次调用都相当于是内部函数只在该编译实体下可调用且允许不同编译实体中存在重复定义这样就能正常编译运行了。总结来说static起到的是一个安全保障功能。 参考链接 4 总结 本文从研究内联函数出发分析了C语言多文件编程的具体流程并基于次对内联函数的含义和性质、inline和static两个关键词及其组合等内容进行了详细的介绍对于阅读ARM内核代码有一定的帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI技术全景解析:从架构设计到社会影响

本文系统梳理了人工智能技术的研究框架与实施方案,涵盖技术架构设计、经济影响分析、安全风险评估等核心领域,包括个人AI基础设施构建、AGI实现路径、AI威胁建模等关键技术内容。AI Index 人工智能研究、框架和实施指…

对话系统中零样本与少样本学习技术解析

本文介绍了一种用于任务型对话系统的零样本和少样本知识寻求轮次检测技术,通过自适应表示学习和密度估计模型,有效处理训练数据分布外的用户请求,提升对话系统的泛化能力。Alexa AI团队荣获NeurIPS研讨会最佳论文奖…

企业招聘网站大全免费宁波设计网站公司

文 | 苏剑林编 | 智商掉了一地单位 | 追一科技思想朴素却不平凡的分类问题后处理技巧,浅显易懂的讲解,拿来吧你!顾名思义,本文将会介绍一种用于分类问题的后处理技巧——CAN(Classification with Alternating Normaliz…

自学做网站可以嘛上海网站建设开发电话

JetCache自动化配置加载 JetCache的配置加载主要是在jetcache-autoconfigure模块中完成的,其中加载配置的核心类是JetCacheAutoConfiguration,主要是用于创建全局性的一些Bean,例如全局缓存配置类GlobalCacheConfig,AutoConfigur…

公司网站开发立项文档桂林十里画廊

初中物理中最重要的部分就是公式了,在这之中公式的换算可以说是一个难点,也是一个重点。力学部分一、速度公式火车过桥(洞)时通过的路程s=L桥+L车声音在空气中的传播速度为340m/s 光在空气中的传播速度为3108m/s二、密度公式(ρ水…

网站制作软件排行榜推广网站技巧

这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸。不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀,糟糕的…

银川网站开发推广企业微信营销的方法7种

1. 题目 给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。 请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。 示例 1: 输入:nums [2,5,1,3,4,7], n 3 …

九江巿建设局网站周口学做网站

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接,在正式开始学习前,先把本节的思维导图引入: 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

书店网站建设目标调研的方案网站图片悬浮代码

将at24c04模块连接到开发板i2c2总线上 i2ctool查看i2c2总线上都有哪些设备 UU表示设备地址的从设备被驱动占用,卸载对应的驱动后,UU就会变成从设备地址。at24c04模块设备地址 0x50和0x51是at24c04模块i2c芯片的设备地址。这个从芯片手册上也可以得知。A0 A1 A2表示的是模块对…

中国建设教育协会的是假网站吗城乡建设学校网站

‍‍‍‍1这篇文章是在上一篇文章之后写的,因为上篇文章写到了嵌入式找兼职的一些坑,下面有同学留言说要怎么找到兼职项目,所以这篇文章会写一些我的兼职经历还有总结建议,希望对大家如何找兼职有一些帮助。这篇文章是写第二次了&…

提示网站正在建设中常州小型网站建设

使用Jest测试Cesium源码 介绍环境Cesium安装Jest安装Jest模块包安装babel安装Jest的VSC插件 测试例子小结 介绍 在使用Cesium时,我们常常需要编写自己的业务代码,其中需要引用Cesium的源码,这样方便调试。此外,目前代码中直接使用…

随手记 | 关于AI最新趋势和未来发展方向探讨

随手记 | 关于AI最新趋势和未来发展方向探讨总的来说,我想要表达的是未来的发展速度越来越快了 还有自己不能像别人那样清晰且流程的表述出自己的观点,即使自己在AI的领域中已经有很深入的学习了,也许是贬低或是却是…

网站建设企业号助手企业网站排名提升软件智能优化

错误显示 前提条件 apt-get install opensslapt-get install openssl-dev 解决办法 在CMakeLists.txt文件中加入如下命令link_libraries(crypto) 参考链接 无法将openssl库链接到CLion C 程序c - 无法将openssl库链接到CLion C程序

奉贤免费网站建设app模板下载网站模板

选择自己发新年短信群发还是106短信平台,取决于您的需求和资源。 如果您需要发送的短信数量较少,或者您有特定的发送需求,例如需要发送一些包含敏感信息的短信,那么您可以选择自己发送。您可以使用手机或电脑上的短信应用程序来发…

大名做网站网页好看的网站设计

在k8s当中支持两种声明资源的方式: 1、 yaml格式:主要用于和管理资源对象 2、 json格式:主要用于在API接口之间进行消息传递 声明式管理方法(yaml)文件 1、 适合对资源的修改操作 2、 声明式管理依赖于yaml文件,所有的内容都在y…

linux系统服务器怎么做网站图书信息管理系统代码网站建设

指定顶部模块和重新排序源 文件夹默认情况下,Vivado Design Suite会自动确定设计的顶层添加到的源文件的层次结构和细化、合成和模拟的顺序项目这可以通过右键单击中的“层次更新”设置进行控制“源”窗口的菜单。请参阅中的“源”窗口中的“层次更新”命令Vivado …

上海网站建设中心深圳高端网站建设创新

8月24日-27日,第十七届全国知识图谱与语义计算大会(CCKS 2023)在沈阳召开。大会以“知识图谱赋能通用AI”为主题,探讨知识图谱对通用AI技术的支撑能力,探索知识图谱在跨平台、跨领域等AI任务中的作用和应用途径。 作为…

模板网站的建设方式与方法广州广告网站建设

一、 多租户定义 多租户定义: 多租户技术或称多重租赁技术,简称SaaS,是一种软件架构技术,是实现如何在多用户环境下(此处的多用户一般是面向企业用户)共用相同的系统或程序组件,并且可确保各用…

纪检监察网站建设方案用家用电脑建设网站

2013年手游行业的规模与收入均实现了大幅增长,发展势头强劲。然而,在手游快速发展的同一时候,因为监管、审核等方面存在着漏洞,手机游戏软件被破解后注入恶意代码、盗取用户財产、窃取用户设备信息的现象屡见不鲜。手游被破解后黑…

# Redis vs ElasticSearch 搜索性能对比

# Redis vs ElasticSearch 搜索性能对比Posted on 2025-10-07 05:00 吾以观复 阅读(0) 评论(0) 收藏 举报关联知识库:# Redis vs ElasticSearch 搜索性能对比Redis vs ElasticSearch 搜索性能对比 思维路线导读…