当前位置:网站首页>Principle and usage of extern
Principle and usage of extern
2022-07-06 17:53:00 【TABE_】
Here's the catalog title
extern It can be used to specify links ; It can also be placed in front of variables or functions , A function defined in a file or other variable , Prompt the compiler to look for its definition in other modules when it encounters this variable and function .
Say something reasonable. , It has the following two functions :
- And “C” Continuous use , Such as extern “C” void fun(); Tell the compiler to press C The rules to translate
- Global variable or function declaration , Its declared variables and functions can be found in other modules ( file ) Use in , Be careful , This is just a statement, not a definition , The specific definition should be completed in the specific module
And “C” Continuous use ( Link assignment )
stay CPP You can often see code in the following form in the file :
#ifdef __cplusplus
extern "C" {
#endif
/**** some declaration or so *****/
#ifdef __cplusplus
}
#endif /* end of __cplusplus */
that , What's the use of this way of writing ? actually , This is to make CPP Can and C Interface . The reason for this is , It is because of some differences between the two languages .
because CPP Support polymorphism , That is, functions with the same function name can complete different functions ,CPP It is usually through parameters to distinguish which function is called . At compile time ,CPP The compiler concatenates the parameter type with the function name , So after the program is compiled into the object file ,CPP The compiler can directly link multiple object files into one object file or executable file according to the symbol name in the object file . But in C In language , Because there is no concept of polymorphism ,C When compiling, the compiler will add an underscore in front of the function name , Do nothing ( At least that's what many compilers do ). For this reason , When CPP And C Mixed programming , There could be problems .
Suppose such a function is defined in a header file :
int foo(int a, int b);
The implementation of this function is located in a .c In file , meanwhile , stay .cpp The function is called in the file. . that , When CPP When the compiler compiles this function , It is possible to change the function name to _fooii, there ii Indicates that the first and second parameters of the function are integers . and C The compiler may compile the function name into _foo. in other words , stay CPP In the target file obtained by the compiler ,foo() The function consists of _fooii Symbols to reference , And in the C In the target file generated by the compiler ,foo() The function consists of _foo Referring to .
But when the linker works , It doesn't matter what language the upper level uses , It recognizes only symbols in the target file . therefore , The connector will be found in .cpp Called in foo() function , But it can't be found in other target files _fooii This symbol , Therefore, an error is prompted in the connection process .extern “C” {} This grammatical form is used to solve this problem .
Global variable or function declaration
for instance , We want to declare a long int runtime_minute Variables are used by multiple modules :
//time.h
#ifndef TIME_H
#define TIME_H
// First of all we have time.h Make the following statement :
extern long int runtime_minute;
#endif //TIME_H
Pass... In the header file extern Declared variables are not defined , So we need to time.cpp The definition of :
//time.cpp
#include "time.h"
// stay time.cpp Give in runtime_minute Specific definition of variables :
long int runtime_minute = 0;
At this time , If you want to time2.cpp Use this definition in time.cpp Medium runtime_minute Variable , Just include time.h This header file is enough :
//time2.cpp
#include "time.h"
#include <iostream>
// stay time.cpp Give in runtime_minute Specific definition of variables :
int main(){
runtime_minute++;
std::cout<<runtime_minute<<std::endl;
// Output is 1
return 0;
}
边栏推荐
- Xin'an Second Edition; Chapter 11 learning notes on the principle and application of network physical isolation technology
- 分布式(一致性协议)之领导人选举( DotNext.Net.Cluster 实现Raft 选举 )
- Summary of study notes for 2022 soft exam information security engineer preparation
- Interview assault 63: how to remove duplication in MySQL?
- Why should Li Shufu personally take charge of building mobile phones?
- 【MySQL入门】第三话 · MySQL中常见的数据类型
- Pourquoi Li shufu a - t - il construit son téléphone portable?
- Is it meaningful for 8-bit MCU to run RTOS?
- BearPi-HM_ Nano development board "flower protector" case
- Alertmanager sends the alarm email and specifies it as the Alibaba mailbox of the company
猜你喜欢

Interview shock 62: what are the precautions for group by?

【MySQL入门】第一话 · 初入“数据库”大陆

F200——搭载基于模型设计的国产开源飞控系统无人机

一体化实时 HTAP 数据库 StoneDB,如何替换 MySQL 并实现近百倍性能提升

scratch疫情隔离和核酸检测模拟 电子学会图形化编程scratch等级考试三级真题和答案解析2022年6月

Solution qui ne peut pas être retournée après la mise à jour du navigateur Web flutter

It doesn't make sense without a distributed gateway

Grafana 9 正式发布,更易用,更酷炫了!

QT中Model-View-Delegate委托代理机制用法介绍

Getting started with pytest ----- test case pre post, firmware
随机推荐
How to use scroll bars to dynamically adjust parameters in opencv
【ASM】字节码操作 ClassWriter 类介绍与使用
BearPi-HM_ Nano development board "flower protector" case
酷雷曼多种AI数字人形象,打造科技感VR虚拟展厅
Summary of study notes for 2022 soft exam information security engineer preparation
HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
李書福為何要親自掛帥造手機?
Stealing others' vulnerability reports and selling them into sidelines, and the vulnerability reward platform gives rise to "insiders"
RB157-ASEMI整流桥RB157
Xin'an Second Edition: Chapter 24 industrial control safety demand analysis and safety protection engineering learning notes
EasyCVR电子地图中设备播放器loading样式的居中对齐优化
[getting started with MySQL] fourth, explore operators in MySQL with Kiko
MarkDown语法——更好地写博客
Essai de pénétration du Code à distance - essai du module b
Guidelines for preparing for the 2022 soft exam information security engineer exam
Basic configuration and use of spark
微信小程序中给event对象传递数据
The art of Engineering
分布式不来点网关都说不过去
面试突击62:group by 有哪些注意事项?