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