C++ 如何区分对全局变量的调用和全局变量的声明?
How C++ differentiates between a call to global variable and declaration of a global variable?
这是全局变量和链接属性部分中最让我困惑的部分。
extern int g_var1;
在定义外部非常量全局变量时,语句可能是这样的。我想我会为在其他文件中使用该变量(通过前向声明)编写完全相同的代码。如果两个语句相同,C++ 如何知道变量是在文件中声明还是定义?
如果我对你的问题理解正确,你不应该在另一个文件中写完全相同的内容(即,你不应该在两个文件中写 "extern int g_var1")。一个好的做法是在头文件中声明一些全局变量;在包含此头文件的 cpp 文件中进行定义。执行此操作后,您可以在将包含头文件的所有文件中使用此变量。
为了说明,一个例子是这样的:
variables.hpp
#pragma once
extern int g_var1;
variables.cpp
#include "variables.h"
int g_var1 = 1;
main.cpp
#include "variables.h"
#include <iostream>
using namespace std;
int main(){
cout << g_var1 << endl;
}
形式的陈述
extern int g_var1; // this is a declaration
是一个变量的声明。关键字 extern 确保了这一点。
如果你写
int g_var1; // declare and define variable
你也定义了。您可以根据需要多次声明变量,但只能定义一次。因此你可以写
extern int g_var1;
在那些需要使用变量的文件中。然后在链接期间,编译器将解析变量的定义(当然前提是您在某个文件中给出了定义)。
当你说extern int g_var1;
这个变量只是声明了,以后要用的时候直接用就可以了。
file1.cpp:
int g_var1;
File2.cpp:
extern int g_var1;
不用每次都写extern
。
虽然我会建议你是否必须使用全局变量将它们放在一个单独的头文件中。
这是全局变量和链接属性部分中最让我困惑的部分。
extern int g_var1;
在定义外部非常量全局变量时,语句可能是这样的。我想我会为在其他文件中使用该变量(通过前向声明)编写完全相同的代码。如果两个语句相同,C++ 如何知道变量是在文件中声明还是定义?
如果我对你的问题理解正确,你不应该在另一个文件中写完全相同的内容(即,你不应该在两个文件中写 "extern int g_var1")。一个好的做法是在头文件中声明一些全局变量;在包含此头文件的 cpp 文件中进行定义。执行此操作后,您可以在将包含头文件的所有文件中使用此变量。
为了说明,一个例子是这样的:
variables.hpp
#pragma once
extern int g_var1;
variables.cpp
#include "variables.h"
int g_var1 = 1;
main.cpp
#include "variables.h"
#include <iostream>
using namespace std;
int main(){
cout << g_var1 << endl;
}
形式的陈述
extern int g_var1; // this is a declaration
是一个变量的声明。关键字 extern 确保了这一点。 如果你写
int g_var1; // declare and define variable
你也定义了。您可以根据需要多次声明变量,但只能定义一次。因此你可以写
extern int g_var1;
在那些需要使用变量的文件中。然后在链接期间,编译器将解析变量的定义(当然前提是您在某个文件中给出了定义)。
当你说extern int g_var1;
这个变量只是声明了,以后要用的时候直接用就可以了。
file1.cpp:
int g_var1;
File2.cpp:
extern int g_var1;
不用每次都写extern
。
虽然我会建议你是否必须使用全局变量将它们放在一个单独的头文件中。