У меня есть код здесь. Это была головоломка, чтобы решить. Однако я не мог понять часть о header_var
, которая является static int . Почему можно изменить значение header_var
с q1_main.cpp и не изменить его значение в 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