0
点赞
收藏
分享

微信扫一扫

【genius_platform软件平台开发】第二十三讲:static关键字使用

在项目组成员中发现有小伙伴在定义全局静态变量时在头文件中。请引起足够的注意!!!
有些刚毕业或者工作几年的小伙伴基础不牢的还是要好好的记忆下,例如const、static、register、volatile等关键字的使用及注意事项,避免在开发过程中引起异常。

testA.h

static int x = 1;
void printAx();

testA.cpp

#include "stdafx.h"
#include "testA.h"

void printAx()
{
    int nTmp = x++;   
    printf("A.cpp::&x=[%p] 默认值x=[%d] ++之后值x=[%d]\n", &x, nTmp, x);
}

testB.h

static int y = 1;
void printBx();

testB.cpp

#include "stdafx.h"
#include "testA.h"
#include "testB.h"

void printBx()
{
    int nTmp = x;
    x = 5;
    printf("B.cpp::&x=[%p] 默认值x=[%d] x设置为5=[%d]\n", &x, nTmp, x);

    nTmp = y++;
    printf("B.cpp::&y=[%p] 默认值y=[%d] ++之后值y=[%d]\n", &y, nTmp, y);
}

int add(int a, int b)
{
    return a + b;
}

main.cpp

#include "stdafx.h"
#include <windows.h>
#include "testA.h"
#include "testB.h"

int _tmain(int argc, _TCHAR* argv[])
{

    printAx();      // 打印A中变量X。cpp中已经修改
    printBx();      // 打印B中变量X(已修改)。cpp中已经修改
    printAx();      // 再次打印A中变量X。cpp中已经修改
    printf("main.cpp::&x=[%p] x=[%d] &y=[%p] y=[%d]\n", &x, x, &y, y);  // 再次打印A中变量X B中Y(默认)
    printf("main.cpp:: a+b=[%d]\n", add(x, y));

    /*
    * 结论
    * 1. static 变量作用范围为单个编译单元c/cpp
    * 2. 谨慎在头文件定义static全局成员,否则在后续其他模块包含该头文件中都会生产一个相同全局对象,而且都是相互独立互不干扰的
    * 3. 请在c/cpp中定义静态成员
    */

    system("pause");
	return 0;
}

vs2013运行结果:

【genius_platform软件平台开发】第二十三讲:static关键字使用_c++


举报

相关推荐

0 条评论