全局定义和范围内定义的区别
Difference between defining globally and within scope
所以,我有一个全局声明的变量。要使用它,必须对其进行定义。根据我是全局定义还是在 main 函数的范围内定义它,我会得到不同的结果。
基本代码如下:
// main.cpp
//int variable = 3;
int main()
{
//int variable = 5;
func();
return variable;
}
// source.cpp
#include "source.hpp"
void func()
{
cout << variable << endl;
}
// source.hpp
#ifndef __SOURCE_HPP_INCLUDED__
#define __SOURCE_HPP_INCLUDED__
#include<iostream>
using namespace std;
extern int variable;
void func();
#endif // __SOURCE_HPP_INCLUDED__
所以,如果我全局定义(main 之外),那么一切正常。但是,如果我在 main 内定义,则会出现 "undefined reference to 'variable'" 错误。但是我只在 source.cpp 里面调用 ;那么,如果 variable 定义在与 func 相同的 "scope" 中,为什么我会收到此错误?是编译器在链接完成之前先发制人地给出错误吗?还是和我声明为"extern"有关?
您不能在函数内定义全局变量。您实际上是在定义一个不同的、不相关的局部变量,该变量恰好具有相同的名称。
func
引用了全局变量,因此您必须为其定义。
所以,我有一个全局声明的变量。要使用它,必须对其进行定义。根据我是全局定义还是在 main 函数的范围内定义它,我会得到不同的结果。
基本代码如下:
// main.cpp
//int variable = 3;
int main()
{
//int variable = 5;
func();
return variable;
}
// source.cpp
#include "source.hpp"
void func()
{
cout << variable << endl;
}
// source.hpp
#ifndef __SOURCE_HPP_INCLUDED__
#define __SOURCE_HPP_INCLUDED__
#include<iostream>
using namespace std;
extern int variable;
void func();
#endif // __SOURCE_HPP_INCLUDED__
所以,如果我全局定义(main 之外),那么一切正常。但是,如果我在 main 内定义,则会出现 "undefined reference to 'variable'" 错误。但是我只在 source.cpp 里面调用 ;那么,如果 variable 定义在与 func 相同的 "scope" 中,为什么我会收到此错误?是编译器在链接完成之前先发制人地给出错误吗?还是和我声明为"extern"有关?
您不能在函数内定义全局变量。您实际上是在定义一个不同的、不相关的局部变量,该变量恰好具有相同的名称。
func
引用了全局变量,因此您必须为其定义。