C语言中在头文件定义全局函数全局变量与c++中头文件定义全局函数的区别

.h文件
#ifndef CONFIG
#define CONFIG
extern int a;
void static get();

void show();
#endif
.c文件
#include<stdio.h>
#include"config.h"
int a=10;
void static get()
{
printf(“AAAAAAAAA\n”);
}
void show()
{

get();
}
主程序
#include"config.h"
extern int a;
int main()
{
show();
printf("%d\n",a);
return 0;
}

由上面代码c语言定义全局函数限定调用范围(在.c里面实现),只能在本文件中被调用。

而c++中在类里定义全局函数跟变量,加类名::就能调用。为全局变量,所有派生类共享这一块内存。

而在.h定义全局变量static char g_str[] = “123456”;
#include “test1.h”
void fun1()
{
g_str[0] = ‘‘a’’;
cout << g_str << endl;
}
(2) test2.cpp

#include “test1.h”
void fun2() { cout << g_str << endl; }
(3)

void main() {
fun1(); // a23456
fun2(); // 123456
}
这个时候你在跟踪代码时,就会发现两个编译单元中的g_str地址并不相同,因为你在一处修改了它,所以编译器被强行的恢复内存的原貌,在内存中存在了两份拷贝给两个模块中的变量使用。正是因为static有以上的特性,所以一般定义static全局变量时,都把它放在原文件中而不是头文件,这样就不会给其他模块造成不必要的信息污染,同样记住这个原则吧!

发布了6 篇原创文章 · 获赞 2 · 访问量 3587
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览