extern关键字的作用

简介: extern关键字的作用

extern 关键字

强调 1

都是c或者都是c++时使用extern关键字,且都在一个源文件中。

//声明外部变量或函数
#include <stdio.h>
int main(int argc, char const *argv[])
{
  extern var_main;    //提前声明
  extern void func_main();
  func_main();
  printf("main var_main = %d\n", var_main);
  return 0;
}
int var_main = 100;
void func_main() {
  printf("func_main var_main = %d\n", var_main);
}
代码执行结果:
func_main var_main = 100
main var_main = 100

强调2

在外部文件中

//extern_main.c中
#include <stdio.h>
int main(int argc, char const *argv[])
{
  extern var_main;    //提前声明
  extern var_other; //声明在外部文件
  extern void func_main();
  extern void func_other();
  func_main();
  printf("main var_main = %d\n", var_main);
  printf("main var_other = %d\n", var_other);
  return 0;
}
int var_main = 100;
void func_main() {
  printf("func_main var_main = %d\n", var_main);
}
//extern_other.c中
#include <stdio.h>
int var_other = 99;
void func_other() {
  printf("func_other var_other = %d\n", var_other);
}
编译命令:gcc -o extern  extern_mian.c extern_other.c
代码执行结果:
func_main var_main = 100
main var_main = 100
main var_other = 99

强调3

c++ 调用 c 编译的变量或函数

//extern_c.c文件
#include <stdio.h>
int var_c = 99;
void func_c() {
  printf("func_c var_c= %d\n", var_c);
}
//extern_cpp.cpp文件
#include <stdio.h>
extern "C" int var_c;
extern "C" void func_c();
int main() {
  func_c();
  var_c = 100;  //重新赋值
  printf("extern_cpp var_c= %d\n", var_c);
  return 0;
}

编译命令gcc extern_c.c -cgcc extern_cpp.cpp -c分别生成extern_c.oextern_cpp.o 文件,再通过gcc extern_c.o extern_cpp.o -o extern_cplus_c命令生成可执行文件 extern_cplus_c

代码执行结果:
func_c var_c= 99
extern_cpp var_c= 100

充电站

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

相关文章
|
缓存 网络协议 Unix
Linux(UNIX)五种网络I/O模型与IO多路复用
Linux(UNIX)五种网络I/O模型与IO多路复用
332 0
Mac安装tree插件
Mac安装tree插件
302 0
|
5月前
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
|
8月前
|
自然语言处理 安全 程序员
程序员推荐的12款实用模板免费的WordPress主题
本文介绍了12款实用的免费WordPress主题,包括Sydney、PopularFX、Zakra等,涵盖企业、博客、美食等多种风格。这些主题功能丰富,如自定义布局、预制模板、AMP兼容等,适合不同需求的用户。每款主题均有精美预览图展示,建议收藏以备后续使用。更多主题可访问ztmao.com。
416 2
程序员推荐的12款实用模板免费的WordPress主题
|
10月前
|
JSON API 数据格式
eBay商品详情接口(ebay API系列)
eBay 商品详情接口是电商从业者、开发者和数据分析师获取商品详细信息的重要工具,涵盖标题、价格、库存、卖家信息等。使用前需在 eBay 开发者平台注册并获取 API 凭证,通过 HTTP GET 请求调用接口,返回 JSON 格式数据。Python 示例代码展示了如何发送请求并解析响应,确保合法合规使用数据。
356 12
|
存储 缓存 JavaScript
当Vue.observable()遇上Vuex:选择最佳状态管理方案的指南
【8月更文挑战第27天】在构建大型Vue应用程序时,合理管理组件间共享状态至关重要。本文深入探讨了Vuex和Vue.observable()两种状态管理工具的特点。Vue.observable()以其简洁的API适用于小型至中型项目,而Vuex遵循严格的Flux架构,专为复杂的大中型应用设计,确保状态变化的可预测性和高效性。通过示例代码比较两者实现方式,展示了尽管Vuex操作更为复杂,却能带来更好的可维护性和扩展性。最终,开发者可根据项目的具体需求和规模来选择最适合的状态管理方案。
228 0
|
10月前
|
人工智能
云工开物合作动态丨中央美术学院与阿里云签约,推动人工智能和艺术与设计学科融合发展
2024年12月8日,中央美术学院与阿里云在厦门签署合作协议,双方将结合艺术与技术优势,在人工智能与艺术交叉学科的课程共建、学生实践等方面展开合作。阿里云通过“云工开物”计划提供算力资源和PAI ArtLab平台,助力师生高效创作,推动艺术与设计类人才培养新模式的探索。
|
12月前
|
数据采集 安全 定位技术
使用代理IP爬虫时数据不完整的原因探讨
在信息化时代,互联网成为生活的重要部分。使用HTTP代理爬取数据时,可能会遇到失败情况,如代理IP失效、速度慢、目标网站策略、请求频率过高、地理位置不当、网络连接问题、代理配置错误和目标网站内容变化等。解决方法包括更换代理IP、调整请求频率、检查配置及目标网站变化。
252 11
|
搜索推荐 定位技术 数据库
ads设计表结构
【8月更文挑战第9天】
427 2
|
Dart 开发工具 Android开发
Flutter学习:从搭建环境到运行
Flutter学习:从搭建环境到运行
268 0