C语言学习第六天

时间:2024-01-25 20:19:36

一、static 关键字


  1. static用于函数里的变量时:通常,你在函数里定义的变量,当函数运行完就消失了,下次再运行函数时,这个变量又是全新的。但如果你在函数内部的变量前面加上static,这个变量就会记住上次运行函数时的状态。就像是游戏里的存档点,下次进入函数时,可以从上次离开的地方继续。

(1)当不使用static时:

C语言学习第六天_static变量

(2)当使用static时

C语言学习第六天_static变量_02

  1. static用于文件顶部的变量或函数时:通常,你在一个文件顶部定义的变量或函数,其他文件也可以使用它们,就像大家共享一本公开的笔记一样。但如果你在这些变量或函数前面加上static,它们就像是变成了秘密日记,只有在这个文件内部才能看到和使用,其他文件就不知道它们的存在了。

简单来说,static关键字就是一个记忆和隐私的工具。在函数里使用时,它帮助变量记住上次的状态;在文件顶部使用时,它帮助变量或函数保持私密,不被其他文件看到。


static关键字用于文件顶部的变量或函数时,它们变为该文件私有,即只能在定义它们的文件内部被访问或调用。这有助于隐藏细节,防止其他文件不小心改动到这些内部变量或调用这些内部函数。

下面是一个例子:

假设你有一个文件叫做main.c,在这个文件顶部,你定义了一个static变量和一个static函数。

// 在main.c文件中

static int internalCounter = 0; // 只能在main.c中访问的静态变量

static void incrementCounter() { // 只能在main.c中调用的静态函数
    internalCounter++;
}

void resetCounter() { // 全局函数,可以在其他文件中调用
    internalCounter = 0;
}

void printCounter() { // 全局函数,可以在其他文件中调用
    printf("Counter: %d\n", internalCounter);
    incrementCounter(); // 在此函数内部调用静态函数
}

在这个例子中:

  • internalCounter是一个static变量,仅限于在main.c文件中使用。其他文件不能直接访问或修改internalCounter
  • incrementCounter是一个static函数,只能在main.c文件内被调用,其他文件不能调用它。
  • resetCounterprintCounter是非静态(全局)函数,可以被其他文件中的代码调用。尽管它们可以在main.c文件外部被调用,但只有这些函数内部可以访问和修改internalCounter,因为它是静态的。

这种方式可以保护internalCounter变量和incrementCounter函数不被外部文件直接访问,从而避免了潜在的错误或冲突。

例如,当在源.cpp前面不加static时

C语言学习第六天_全局函数_03

当run Hello_world.cpp时能成功

C语言学习第六天_static关键字_04

当在源.cpp前面加static时

C语言学习第六天_全局函数_05


三、宏的定义

C语言学习第六天_全局函数_06