static的用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static的用法相关的知识,希望对你有一定的参考价值。
static 的用法
static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).
(1)局部静态变量
(2)外部静态变量/函数
(3)静态数据成员/成员函数
下面就这三种使用方式及注意事项分别说明
(1)局部静态变量
定义在代码块中,只做用于代码块内
#include<iostream>
using namespace std;
int global = 3;
static int s_external = 4;
void func(){
static int sta = 1; //这里就是局部静态变量 只初始一次,
sta++;
cout << sta << endl;
}
int main(){
func();//这里会输出2
func();//这里会输出3
system("pause");
return 0;
}
如此就可以看出静态局部变量的作用了。
(2)外部静态变量/函数
这里的静态变量和函数,就不是用于区分存储的可持续了,而是区分是否是内部链接的(通俗说就是外部不可用)
用例子说明:
在test1.cpp
#include<iostream>
using namespace std;
int global = 3; //静态外部变量 能在外部文件中使用
static int s_global = 4;//静态内部变量只能在本文件中使用
extern void external_global(){ //静态外部函数
cout << "func_external_global" << endl;
}
static void external_static(){ //静态内部函数
cout << "func_internal_static" <<endl;
}
在test2.cpp
#include<iostream>
using namespace std;
int main(){
extern int global ;//引用文件外的外部链接的变量。
cout << global << endl;
//extern int s_global;
//cout << s_global << endl; 这些都是不允许的因为s_global 只能在test1.cpp中使用
extern void external_global();
extern void external_static(); //引用这些外部的函数。这里虽未报错,但无法使用
external_global();
//external_static(); //因为是静态的函数无法使用。
system("pause");
return 0;
}
下面顺便添加个与此无关的。
2.Menu.h内容如下:
#ifndef MENU_H
#define MENU_H
//int global=13
static global =13
int add(int a,int b);
int minus(int a, int b);
#endif
3.add.cpp内容如下:
#include "Menu.h"
int add(int a, int b)
{
return a+b;
}
4.minus.cpp内容如下:
#include "Menu.h"
int minus(int a,int b)
{
return a-b;
}
4.main.cpp内容如下:
#include <iostream.h>
#include "Menu.h"
int main()
{
int a,b;
a=1;
b=2;
printf("%d",add(1,2));
printf("%d",minus(1,2));
return 0;
}
这种情况下代码没有问题。
但是一旦你红色代码部分,不注释就不可以用了。你必须将add.cpp 和 minus.cpp的#include"Menu.h" 去掉,这样才可以防止重复被定义。因为这些.cpp文件会多次重新定义int global .会有多次include"Menu.h"
当然你也可以把他定义为static
本文出自 “姑苏城” 博客,请务必保留此出处http://ji123.blog.51cto.com/11333309/1965840
以上是关于static的用法的主要内容,如果未能解决你的问题,请参考以下文章