关键字extern用法
extern
作用:在某个.cpp
文件中存在这么一个函数/全局变量
声明外部函数
在a.cpp
中使用b.cpp
中函数,需要在a.cpp
中函数使用之前用extern
修饰函数声明。
a.cpp
#include <iostream>extern double area(int num);int main()
{double r;std::cout << "Please enter radius of circle: " << std::endl;std::cin >> r;std::cout << area(r) << std::endl;return 0;
}
b.cpp
#define PI 3.1415926double area(int num) {return PI * num * num;
}
输出
Please enter radius of circle:
1
3.14159
注: 在a.cpp
中函数声明是可以省略extern
关键字的。
声明外部全局变量
在a.cpp
中使用b.cpp
中全局变量,需要在a.cpp
中变量使用之前用extern
修饰变量声明。
b.cpp
int a = 10;
a.cpp
#include <iostream>extern int a;int main()
{std::cout << "a = " << a << std::endl;return 0;
}
注: 在a.cpp
中全局变量的声明是不能加初始值的。
若是将代码改成:
extern int a = 1;
则会报错
D:\VS2019Projects\externTest\x64\Debug\externTest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
被extern
关键字修饰的函数或全局变量,在自己的cpp文件中定义也是可以的。
例如:main.cpp
#include <iostream>extern int a;
extern int b;
extern int sum(int num1, int num2);int a;
int b;int main()
{a = 10; b = 20;std::cout << "sum = " << sum(a, b) << std::endl;return 0;
}int sum(int num1, int num2) {return num1 + num2;
}
输出
sum = 30
关于重定义
在多个cpp中,不能定义相同名字的符号。
- 不能定义相同名称的全局变量
例如,a.cpp
和b.cpp
中存在相同的全局变量。
a.cpp
#include <iostream>int a;int main()
{return 0;
}
b.cpp
int a;
报错
D:\VS2019Projects\externTest\x64\Debug\externTest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
- 不能定义相同的函数。(函数相同:函数名+参数列表相同)
例如,a.cpp
和b.cpp
中存在相同的函数。
a.cpp
#include <iostream>int sum(int num1, int num2) {return num1 + num2;
}int main()
{return 0;
}
b.cpp
int sum(int num1, int num2) {return num1 + num2;
}
报错
D:\VS2019Projects\externTest\x64\Debug\externTest.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
C++是允许函数重载的,当函数名相同,参数列表不同时,编译器不会报错。例如:
a.cpp
#include <iostream>int sum(int num1, int num2) {return num1 + num2;
}int main()
{return 0;
}
b.cpp
int sum(int num1, int num2, int num3) {return num1 + num2 + num3;
}
- 无定义的错误
当在一个cpp
文件中声明了一个函数,并且调用它。但是在链接过程中没有发现任何一个cpp文件中定义了。例如:
只在main.cpp
中声明函数sum
#include <iostream>extern int sum(int num1, int num2);int main()
{sum(10, 20);return 0;
}
error LNK2019: 无法解析的外部符号 "int __cdecl sum(int,int)" (?sum@@YAHHH@Z),函数 main 中引用了该符号
关键字extern用法相关推荐
- C# 关键字extern用法
C# 关键字extern用法 修饰符用于声明在外部实现的方法.extern 修饰符的常见用法是在使用 Interop 服务调入非 托管代码时与 DllImport 属性一起使用:在这种情况下,该方法还 ...
- 《C关键字分析》之extern用法
<C关键字分析>之extern用法 一.假设为三方提供库源码和头文件 1.共享库部分 sanf.c #include <stdio.h> int a; void hello() ...
- extern用法详解(转)
extern用法详解(转) 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义. 另外,extern ...
- __declspec关键字详细用法
__declspec关键字详细用法 2009-01-21 16:23 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与ext ...
- extern用法详解
[转]extern用法详解 Posted on 2011-08-16 11:15 单鱼游弋 阅读(98) 评论(0)编辑收藏 1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义 ...
- 关于extern用法说明
extern是C/C++语言中表明函数和全局变量 作用范围(可见性)的关键字. 它告诉编译器,其 声明的函数和变量可以在本模块或其它模块中使用. 1.对于extern变量来说,仅仅是一个变量的声明,其 ...
- C语言中static与extern用法总结
前言-变量的储存方法 在C语言中,供用户使用的储存空间分为3个部分,程序区.静态储存区和动态储存区.其中,程序区存放的是可执行程序的机器指令,静态储存区存放的是在程序运行期间需要占用固定储存单元的变量 ...
- extern 用法小结
1 基本解释 extern可以置于变量或者函数 前,以标示变量或者函数 的定义在别的文件中,提示编译器遇到此变量和函数 时在其他模块中寻找其定义. 另外,extern也可用来进行链接指定. 2 问题: ...
- C/C++中 extern用法
一.定义和声明的区别 声明用来告诉编译器变量的名称和类型,而不分配内存,不赋初值. 定义为了给变量分配内存,可以为变量赋初值. 注:定义要为变量分配内存空间:而声明不需要为变量分配内存空间. 二.ex ...
最新文章
- 067_VFPage中Js与controller交互方式(二) RemoteAction
- java 模型 数据库_数据库表与java域模型之间的mapping和自动生成(基于mybatis)
- java代码编译时修改行为_GitHub - niuzhihua/AST_demo: 利用JavaParser框架在编译时修改语法树(源码)的 demo...
- 要买东西,要买好的,提高效率,经常用的
- js用button激活 Alert 元素关闭按钮的交互功能
- Centos下MySQL的安装及常见问题
- php 如何让html表单当中的数据在修改mysql的时候自动变更_怎么用php把html表单内容写入数据库?...
- python如何将数据保存到本地json文件
- 日志系统新贵 Loki,确实比笨重的 ELK 轻
- centos7重装python_centos7完全重装python和yum
- Swift iOS : plist
- linux xxx is not in the sudoers file.This incident will be reported.的解决方法
- 查看kms服务器信息,查看kms服务器地址
- [笔记分享] [GPIO] MSM8x39 GPIO 软件部分小结
- 考研助手软件制作记录
- 服务器的硬盘分盘,服务器硬盘分区教程
- C# 时间日期的获取与比较
- 常用计算机辅助审计技术,常用的计算机辅助审计技术
- 微软修补Windows零日漏洞,该漏洞允许在Windows计算机上远程执行
- Android 从应用程序跳到系统应用管理和应用的权限管理页面