全局定义和范围内定义的区别

Difference between defining globally and within scope

本文关键字:定义 区别 全局 范围内      更新时间:2023-10-16

所以,我有一个全局声明的变量。为了使用它,必须对其进行定义。根据我是全局定义还是在 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 中定义,那么我会得到"对'变量'的未定义引用"错误。但我只调用源.cpp当我在主内部时;那么,如果变量是在与 func 相同的"范围"内定义的,为什么会出现此错误?是编译器只是在链接完成之前先发制人地给出错误吗?还是与我将其声明为"外部"有关?

不能在函数中定义全局变量。您实际上是在定义一个不同的、不相关的局部变量,它恰好具有相同的名称。

func引用全局变量,因此必须为其定义。