extern static 在linux 和 qt下差别

这篇具有很好参考价值的文章主要介绍了extern static 在linux 和 qt下差别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

extern static 在linux 和 qt下差别,c++

 从五个点来说

1.p3.h 中 静态定义一个const的int 变量并且赋值

2.p5.h 声明函数test2的定义

3. 直接extern 引用声明 test1() 函数 而不是像p5.h一样 把函数声明写到头文件 在别的.c文件直接包含头文件  第二点和第三点 是引用声明函数的两种用法

4.main函数 中static静态定义一个const变量num,然后在p1.c也是这样定义一个同名变量,这个是为了说明内部链接,在main函数中和p1.c中,这两个变量num是分别存在内存中,如果qt这样写,就会报错

5.外部引用声明一个int的externnum变量,而这个externnum的变量是在p2.c中声明并且定义为30的,这个做法是和把变量写在头文件然后别的.c文件包含头文件去使用这个变量

p1.c

extern static 在linux 和 qt下差别,c++

 p2. cextern static 在linux 和 qt下差别,c++

p3.h

extern static 在linux 和 qt下差别,c++ 

p4.c

extern static 在linux 和 qt下差别,c++ 

p5.hextern static 在linux 和 qt下差别,c++ 

a.out

extern static 在linux 和 qt下差别,c++ 

 文章来源地址https://www.toymoban.com/news/detail-808853.html

 一言以蔽之:

函数 :可以通过extern 和包含对应函数定义的头文件来使用它

变量:可以通过extern 和包含对应变量定义的头文件来使用它

static const int num = 10: 一个.c文件 中这样写,是内部链接,是在这个.c文件自己独立给这个num分了内存,其他的.c文件是不能访问到这个num的,不会有报错(c primer plus书上346页  回去拍个照 贴上来)

这样在qt里面写,也是行的,qt在.c文件(不是.h文件) 写static const int num = 10,是整个程序这给这个num开一个内存,是也会给每个.c文件分属于这个num独立的内存的。

extern static 在linux 和 qt下差别,c++

 

但是如果static const int num = 10写在.h,然后一个.c文件包含这个.h文件,然后又在这个.c文件又定义一个static const int num = 10,就会报错说是重定义。(其实也是很好理解了,包含了头文件就相当于引用声明了num,再一次自己定义声明num,就肯定会报重定义)

 

 

 

到了这里,关于extern static 在linux 和 qt下差别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言中volatile/register/const/static/extern/auto关键字的作用

    目录 一、volatile 二、register详解 三、const详解 四、static详解 五、extern详解 语法 作用 六、auto详解 突然想总结一下这些的作用,灵活使用这些对程序的可靠性和速率都有提高 volatile是防止编译器优化,如果是高频繁的变量编译器会自动将变量放到寄存器中,但是有的变

    2024年02月07日
    浏览(56)
  • Linux中启动Docker容器报错:Error response from daemon driver failed programming external

    在启动Docker的容器时,会出现报错: Error response from daemon: driver failed programming external connectivity on endpoint XXX(端口映射或启动容器时报错) 如下: 原因 : 在我们启动了Docker后,我们再对防火墙firewalld进行操作,就会发生上述报错 , 详细原因:docker服务启动时定义的自定义

    2024年02月16日
    浏览(40)
  • Linux 中 Docker 启动服务时报错 driver failed programming external connectivity on endpoint: xxxx

    环境: Rocky 8.6 ( CentOS 7 )、 firewalld 、 Docker PS: 如果防火墙关闭的话,或许一直都不会遇到该问题吧,又掉了一撮头发。 当且仅当需要占用服务器的端口时才会报错, 如果不需要映射端口,也不会遇到相应的问题 。 比如: docker run -d --name nginx-test1 nginx 这种的没有映射端口

    2024年02月04日
    浏览(34)
  • 解决python 3.11版本在linux ubuntu 23.04上使用pip命令报错:error: externally-managed-environment

    按照提示,需使用虚拟环境方可正常使用pip install相关命令,应该是python版本升级之后在linux环境将这点作为了必选项。

    2024年02月07日
    浏览(37)
  • 同样是产品经理 段位差别大

    同样是产品经理,段位差别大 趣讲大白话:做人的差距大 【趣讲信息科技189期】 **************************** 市场越内卷 对产品的要求越来越高 不管叫不叫产品经理这个头衔 产品开发的重要性不会降低 《人人都是产品经理》总结的段位 姑且一看,也不是真理 很多积极参与事务

    2024年02月08日
    浏览(35)
  • 后端行情变了,差别真的挺大。。。

    大家好,我是R哥。 最近,我发现后端行情变了,差别真的挺大。。。 大家知道我在做「面试辅导」,年后也聊了不少小伙伴,了解了现在大多数程序员的普遍现状、痛点及诉求,也看了许多的形形色色的简历,真的太有感触了。 先说两个很有对比性的例子: 一位咨询的小

    2024年03月13日
    浏览(25)
  • Python 和 C++ 使用细节差别

    C++ 中, for 循环中写明 a.size() ,每次循环这个值是重新计算的; Python 中 for 循环 len(a) , 循环中a变化r循环仍采用刚开始执行循环时计算的len(a) while 循环,python3和C++,while条件中的长度计算是可变的,即每次循环都会重复计算。 #include algorithm list.insert(idx, val) idx 整数 vecto

    2024年02月11日
    浏览(35)
  • 硬件和软件看门狗的差别

      说到提高系统的可靠性,刚入门的工程师都知道,增加一个看门狗是重要的手段。看门狗又分软件看门狗和硬件看门狗,但是很多人可能没有深入了解其中的区别,工作中可能都遇到这样的PK:   软件和硬件看门狗有什么区别?学完这篇文章就可以迎刃而解了。 硬件看

    2024年02月08日
    浏览(48)
  • clickhouse 单副本和双副本升级差别

    云上单副本就够了,成本更低,而且基于云盘不会丢数据。 双副本的优势在于升级、重启等可滚动进行,考虑到这是少数场景,如果业务不是非常敏感,为了这个滚动付出多一倍成本不太值得。 clickhouse,单副本,升级、重启,会有5-10分钟应用中断。 它是轮流重启,不过基

    2024年01月21日
    浏览(26)
  • Sentinel的限流和Gateway的限流差别?

    问题说明:考察对限流算法的掌握情况 限流算法常见的有三种实现:滑动时间窗口,令牌桶算法,漏桶算法。gateway则采用基于Redis实现的令牌桶算法。但是我们不会去用,而Sentinel 功能比较丰富。 而sentinel内部比较复杂: 默认限流模式是基于滑动时间窗口算法 针对资源做统

    2024年02月09日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包