请你说说 extern 的作用,extern变量在哪个数据段,为什么要 extern C
时间: 2023-11-21 22:50:46 浏览: 273
extern是C++中的关键字,用于声明一个变量或函数的外部链接性。它的作用有两个方面:
1. 声明外部变量:使用extern关键字可以声明一个在其他源文件中定义的全局变量,使得当前源文件可以引用该变量而不需要重新定义。这样可以在不同的源文件中共享同一个全局变量。
2. 声明外部函数:使用extern关键字可以声明一个在其他源文件中定义的函数,使得当前源文件可以引用该函数而不需要重新定义。这样可以实现函数的模块化和代码的复用。
extern变量通常存储在静态存储区(也称为数据段)中。静态存储区包括全局变量、静态变量和常量等。这些变量在程序运行期间一直存在,不会随着函数的调用结束而销毁。
关于为什么要使用extern C,主要是为了解决C++编译器对函数名进行修饰(Name Mangling)的问题。C++编译器会根据函数的参数类型和个数等信息对函数名进行修改,以实现函数的重载。而C语言不支持函数重载,因此其函数名不会被修饰。
当C++代码需要调用C语言的函数时,由于函数名修饰的问题,需要使用extern "C"来告诉编译器要按照C语言的命名规则来处理函数名,以确保能够正确链接和调用C语言的函数。
总结起来,extern关键字用于声明外部变量和函数,extern变量存储在静态存储区,extern "C"用于处理C++和C语言之间的函数调用问题。
相关问题
c++ extern 共享变量
在 C++ 中,`extern` 关键字用于声明而不是定义变量。当你在一个作用域(如函数、文件或命名空间)中使用 `extern` 声明一个变量,实际上是在告诉编译器这个变量存在于另一个地方,需要链接阶段才能找到其实际的定义。如果你在头文件(`.h`)中使用 `extern` 定义变量,那么它被称为外部变量或全局变量,可以在程序的不同源文件中共享。
例如:
```cpp
// 文件 header.h
extern int sharedVariable;
// 文件 source.cpp
int sharedVariable = 0; // 这里是变量的定义
void someFunction() {
sharedVariable = 42;
}
// 另一个源文件 another_source.cpp
#include "header.h"
someFunction(); // 调用函数会修改 sharedVariable 的值
```
在这个例子中,`sharedVariable` 是在编译期间作为外部引用存在,而实际的变量定义在 `source.cpp` 中。这样可以方便地在多个模块之间共享数据,同时保持了封装性和模块化。
python 编写一段代码,向通达信signals目录内的extern_user.txt写入外部数据
在Python中,你可以使用内置的`open()`函数以及`os`模块来处理文件操作。这里是一个简单的例子,假设你需要将一些数据写入`extern_user.txt`文件,该文件位于通达信(Tdx)的signals目录内:
```python
import os
# 指定需要写入的路径,注意这里的`signals`需要替换为你实际的文件所在路径
data_to_write = "你的数据内容" # 这里填入你要写入的具体字符串
file_path = os.path.join("your_tdx_directory", "signals", "extern_user.txt")
try:
# 打开文件,如果不存在则创建
with open(file_path, 'w') as f:
f.write(data_to_write)
except FileNotFoundError:
print(f"文件'{file_path}'未找到,无法写入.")
except Exception as e:
print(f"写入文件时发生错误: {str(e)}")
# 提供的示例数据仅供参考,实际使用时请替换为你的数据
```
在这个例子中,`os.path.join()`用于拼接绝对路径,确保跨平台兼容。记得将`your_tdx_directory`替换为你的通达信安装目录。
阅读全文