C++ 为什么在这段代码中,静态int不';是否更改或给出编译错误?

C++ 为什么在这段代码中,静态int不';是否更改或给出编译错误?,c++,static,header,int,output,C++,Static,Header,Int,Output,我这里有密码。这是一个需要解决的难题。然而,我无法理解关于头的部分,它是一个静态int。为什么可以从q1\u main.cpp更改header\u var的值,并且在q1\u helper.cpp中不更改其值。另外,为什么我没有收到任何警告或编译错误 代码如下: q1_main.cpp: #include <iostream> #include "q1_header.h" using namespace std; void func_1(int param_1); void func

我这里有密码。这是一个需要解决的难题。然而,我无法理解关于
头的部分,它是一个静态int。为什么可以从q1\u main.cpp更改
header\u var
的值,并且在q1\u helper.cpp中不更改其值。另外,为什么我没有收到任何警告或编译错误

代码如下:

q1_main.cpp

#include <iostream>
#include "q1_header.h"
using namespace std;
void func_1(int param_1);
void func_2(int& param_2);
void func_3(int* param_3);
void func_4();
int global_var = -1;
int main() {
    int local_var_1 = -1;
    int local_var_2 = -1;
    int *local_var_3 = new int;
    *local_var_3 = -1;
    //The first line of the output
    func_1(local_var_1);
    func_2(local_var_2);
    func_3(local_var_3);
    cout << local_var_1 << " " <<
        local_var_2 << " " <<
        *local_var_3 << endl;
    //The second line of the output
    func_1(global_var);
    cout << global_var << endl;
    //The third line of the output
    header_var = 5;
    func_4();
    cout << global_var << " " <<
        header_var << endl;
    //The fourth line of the output
    loop(i, 2) {
        static int static_var = 0;
        cout << static_var++ << " ";
    }
    cout << endl;
    return 0;
}
#include <iostream>
#include "q1_header.h"
extern int global_var;
void func_1(int param_1) {
    param_1 = 100 / ADD(2,3);
}
void func_2(int& param_2) {
    param_2 = 100 / MUL(50, 2);
}
void func_3(int* param_3) {
    *param_3 = 200 / (ADD(2,8) * MUL(10,2));
}
void func_4() {
    global_var = 100 / ADD(2,3);
    header_var = 10;
}

#ifndef Q1_HEADER_H
#define Q1_HEADER_H
#define ADD(x,y) x + y
#define MUL(x,y) x * y
#define loop(x,n) for(int x=1; x<=n; ++x)
static int header_var = -1;
#endif
#包括
#包括“q1_头.h”
使用名称空间std;
无效函数1(int参数1);
void func_2(int和param_2);
无效函数3(int*参数3);
void func_4();
int global_var=-1;
int main(){
int local_var_1=-1;
int local_var_2=-1;
int*local_var_3=新int;
*局部变量3=-1;
//输出的第一行
func_1(局部变量1);
func_2(local_var_2);
func_3(局部变量3);

您的程序中是否有两个
header\u var
静态变量;一个是static to
q1\u helper.cpp
,另一个是static to
q1\u main.cpp
请记住,预处理器
\include
只不过是“将此文件内容包含在该文件中”因此,想象一下
q1\u main.cpp
现在有
静态int header\u var=-1;
q1\u helper.cpp
。你没有收到警告/错误,因为没有警告/错误。你告诉编译器在合理的范围内做好某件事(接受或不接受),它就按照你的要求做了。@WhozCraig哇,我没注意到!非常感谢!!@WhozCraig这很有意义,但是q1_main.cpp和q1_helper.cpp如何都可以访问q1_头文件.h?因为在该文件的开头有一个
\ifndef
语句。这不是意味着我们只能访问该头文件一次,但你说了不是吗hat`**q1\u helper.cpp**和q1\u main.cpp有单独的
静态int头\u var=-1;
。这怎么可能?我很困惑。谢谢你已经花了很多时间。你在每个cpp文件中都包含了头。你提到的
#ifdef
对于每个cpp文件都是活动的,而不是所有cpp文件都是活动的。拿你的书,读一下预处理的过程或者工作。