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 



本文转自 神迹难觅 51CTO博客,原文链接:http://blog.51cto.com/ji123/1965840,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值