extern测试

extern定义的变量必须是全局的,这样才可能在其他文件中使用,所以,不能在语句块里定义;(可以声明)
extern一般用在访问其他源文件中定义的变量和调用同一文件中下面定义的变量。比如a.cpp文件里定义了int a; b.cpp文件里就可以extern int a;来声明 这样b文件里的a变量就是a文件里的a变量。
全局变量的使用
变量在某一个源文件中声明后,如果在其他源文件中使用,需要在此源文件中加extern关键字重新声明一下。通常做法是这样的,在某源文件中不加extern定义及初始化此变量,用extern显示声明此变量放到头文件中,其他源文件要使用时包含此头文件。

情况一:在test.c中定义并赋值,在main.c中声明并使用

test.c
int j=9;
main.c
#include<stdio.h>
int main()
{
    extern int j;
    printf("\n%d add:%d\n",j,&j);
    return 0;
}

情况二:在test.c中定义并赋值,在test.h中声明,在main.c中#include<test.h> 后使用

test.c
int j=9;

test.h
extern int j;
main.c
#include <stdio.h>
#include <test.h>
int main()
{
    printf("\n%d add:%d\n",j,&j);
    return 0;
}


03-28
`extern "C"` 是 C++ 中的一个关键字组合,主要用于解决 C++ 与 C 语言之间的兼容性问题。由于 C 和 C++ 的函数命名及符号处理方式不同,在混合编程场景下需要一种机制让 C++ 编译器按照 C 风格的方式导出或引用符号,这就是 `extern "C"` 存在的意义。 以下是关于 `extern "C"` 的详细介绍: ### 核心功能 1. **防止名称修饰**: - 在 C++ 中,为了支持重载等特性,编译器会对函数名进行修改(称为“名称修饰”),以便区分同名的不同函数。而 C 语言不会对函数名做这种修改。 - 使用 `extern "C"` 告诉 C++ 编译器不要对特定的函数应用名称修饰规则,使得该函数可以像 C 函数一样被链接和调用。 2. **跨语言交互**: - 如果你需要从 C++ 程序中调用一些纯 C 实现的库,或者将 C++ 函数暴露给只懂 C 接口的环境,那么就需要使用 `extern "C"` 来确保两者能够正常协作。 ### 示例代码 #### 定义部分 (头文件) ```cpp #ifdef __cplusplus extern "C" { #endif void my_c_function(); // 这是一个标准C风格的声明 #ifdef __cplusplus } #endif ``` 上述宏定义结构保证了当这个头文件被包含到C++源码时会自动加上 `extern "C"` 区块;如果是普通C程序引入,则保持原样不变。 #### 调用实例 (CPP 文件内实现并测试) ```cpp // test.cpp #include <iostream> extern "C" void my_c_function() { std::cout << "Hello from a C-style function!" << std::endl; } int main(){ my_c_function(); return 0; } ``` 运行结果将会打印一行信息:“Hello from a C-style function!” ### 注意事项 - 只有当涉及到C/C++混编时才需要用到它; - 对于非成员函数有效果,但是普通的类成员方法无法直接通过这种方式标记成外部"C"连接类型(除非它是静态(static)成员函数)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值