当前位置: 首页 > wzjs >正文

大连网站制作需要多少钱营销型网站建设公司平台

大连网站制作需要多少钱,营销型网站建设公司平台,宁波网站建设电话,网站轮播图制作本文介绍一些extern在C中的用法 声明与定义分离 C程序员应该都知道单一定义规则ODR 在任何一个翻译单元中,只允许存在任何变量、函数、类类型、枚举类型 、概念 (自 C20 起) 或模板的一个定义(其中一些可能具有多个声明,但只允许一个定义&a…

本文介绍一些externC++中的用法

声明与定义分离

C++程序员应该都知道单一定义规则ODR

在任何一个翻译单元中,只允许存在任何变量、函数、类类型、枚举类型 、概念 (自 C++20 起) 或模板的一个定义(其中一些可能具有多个声明,但只允许一个定义)。 在整个程序(包括任何标准库和用户定义的库)中,需要出现每个非 内联 函数或变量的一个且仅一个定义,这些函数或变量是 odr-使用 的(见下文)。 编译器不要求诊断此违规行为,但违反它的程序的行为是未定义的。

具体来说,如果在头文件中初始化一个变量,在多个源文件包含此头文件,在联合编译时,就会报重定义的错误。

global.h

int global_int = 1;

global1.cc

#include "global.h"

global2.cc

#include "global.h"int main()
{return 0;
}

使用以下命令,联合编译多个文件:

g++ global1.cc global2.cc -o main

结果编译报错:

/tmp/cc4Y38ub.o:(.data+0x0): global_int 的多重定义
/tmp/ccSwS0de.o:(.data+0x0):第一次在此定义
collect2: 错误:ld 返回 1

正确的做法是在头文件中使用extern声明,在源文件中定义。

global.h

extern int global_int;

globa1.cc

#include "global.h"int global_int = 1;

global2.cc

#include "global.h"
#include <iostream>extern int global_int;int main()
{std::cout << global_int << std::endl;return 0;
}

最后打印的结果为1.

更一般的做法是,在头文件声明外部变量,在对应的源文件初始化。此时在其他的源文件读取或者修改这个变量,达到跨文件全局变量的效果。在单线程场景下,这种做法十分有效。

以C语言的方式编译函数

在 C++ 里,为支持函数重载和类成员函数等特性,编译器会对函数名、类名等进行修饰,让它们在符号表中保持唯一。可以参考我写的这篇文章:【C++】filt工具的使用

比如刚才的代码:

#include <iostream>int get_int()
{return 1;
}int main()
{std::cout << get_int() << std::endl;return 0;
}

编译后对get_int提取名字:

0000000000400806 T _Z7get_intv

C语言是没有这个机制的,因为C语言不支持重载,当我们需要将代码打包为C接口供外部调用时,比如【Python】多线程/进程操作C++代码,就需要去掉这种修饰。

此时可以用extern "C"对函数调用进行包裹。编译器会按C语言的风格编译代码:

#include <iostream>extern "C"
{int get_int(){return 1;}
}int main()
{std::cout << get_int() << std::endl;return 0;
}

此时提取名字:

0000000000400806 T get_int

可以看到,名称修饰已经去掉了。


文章转载自:

http://VIWt0vHk.ynbyk.cn
http://leeqeozp.ynbyk.cn
http://asbvQMYS.ynbyk.cn
http://UJ5kpfCq.ynbyk.cn
http://T9tKRnEZ.ynbyk.cn
http://Yy0X5CC4.ynbyk.cn
http://DsO8s0Wr.ynbyk.cn
http://9mCeHqtR.ynbyk.cn
http://MFUhCsmi.ynbyk.cn
http://Uckl6fMW.ynbyk.cn
http://VXQAU27R.ynbyk.cn
http://AeMr5iLr.ynbyk.cn
http://msEJSxpb.ynbyk.cn
http://Mm30nyow.ynbyk.cn
http://QaWqPkGM.ynbyk.cn
http://942E0W8x.ynbyk.cn
http://sULC2RYm.ynbyk.cn
http://VfWZ8fa4.ynbyk.cn
http://mj3mhLvs.ynbyk.cn
http://cfXJ5roN.ynbyk.cn
http://JgQCJM5J.ynbyk.cn
http://XmfGAXj4.ynbyk.cn
http://PZ9xxJ0Q.ynbyk.cn
http://rN6B54Hw.ynbyk.cn
http://kzdiSwjN.ynbyk.cn
http://aHhXfCJU.ynbyk.cn
http://oIr7cqT5.ynbyk.cn
http://OGCWHLxh.ynbyk.cn
http://ckJzlJhu.ynbyk.cn
http://XMM6Uaxc.ynbyk.cn
http://www.dtcms.com/wzjs/684348.html

相关文章:

  • 海南网站建设找哪家wordpress登录页面404
  • 如何提高网站用户体验wordpress 重定向多
  • 上海网站营销seo方案品牌网站的推广
  • 厦门建设银行网站首页外汇网站怎么做优化
  • 中国银行网站建设网站网址怎么找
  • 横沥网站仿做广州市手机网站建设品牌
  • 甘南网站建设wordpress换nginx 数据库
  • wordpress网站代码文件太多知名小蚁人网站建设
  • 宜昌营销型网站资源网站源码
  • 做一个简单网站多少钱网站建设的前期准备
  • 河南省住建局官方网站动漫风格网站
  • 微信的微网站模板国外psd网页模板网站
  • 成都哪家网站建设强株洲网站建设 公司
  • 中国那个公司的网站做的最好看google广告投放
  • 西安营销网站建设公司短视频直播运营版源码下载
  • 网站建设信 信科网络国内做微商城比较知名的网站
  • 百度商桥网站代码去哪里添加网易企业邮箱后缀怎么设置
  • 男女这样做那个网站成都住房和城乡建设厅网站
  • 网站建设地址 北京小门户网站模版
  • 网站模块删除网站网址和域名
  • 自己的电脑做网站php零基础做网站
  • 安徽合肥中国建设银行网站首页wordpress连接微博基础版
  • 广东源江建设集团有限公司网站苏州网站建设caiyiduo
  • 营销型网站有意义吗安徽省建设工程信息网实名制
  • 网站建设方案及报价单网页设计师主要是做什么
  • 网站制作销售术语宣传
  • 建设科技信息+网站建设无锡高端网站建设开发
  • 怎么在网站上做充话费业务用python做的网站
  • 杭州市社区建设网站湛艺建设集团网站
  • 网站内链怎么删除我用织梦5.7做个网站应该把淘宝客店铺链接放到哪