为什么在此代码中,静态int不会更改或出现编译错误?

问题描述 投票:0回答:1

我在这里有一个代码。这是一个难题。但是我不明白关于header_var的部分,它是static int。为什么可以从q1_main.cpp中更改header_var的值,而在q1_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;
}

q1_helper.cpp

#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;
}

q1_header.h

#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
c++ static header int output
1个回答
0
投票

@@ WhozCraig这很有意义,但是q1_main.cpp和q1_helper.cpp如何都可以访问q1_header.h?因为在该文件的开头有一个ifndef语句。这不是说我们只能访问此头文件一次,但是您说q1_helper.cpp和q1_main.cpp具有单独的静态int header_var = -1;。这怎么可能?我很混乱。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.