在main()之外分配全局变量

时间:2019-07-02 16:04:27

标签: c++ visual-c++

以下是一个非常简单的c ++代码:-

#include <iostream>
using namespace std;

int i;
i = 2;     //error at line 5
int main()
{
    cout << i << endl;
    return 0;
}

由于第5行,总共产生3个错误:-

  • 此声明没有存储类或类型说明符

  • 缺少类型说明符-假定为int。注意:C ++不支持default-int

  • 'int i':重新定义

我知道第5行在语法上是错误的,但是我找不到任何原因。

我刚刚从 Herbert Schildt 的《 C ++:完全参考》 一书中开始学习C ++。在第2章中,在理解 extern 关键字的同时,

  

声明声明对象的名称和类型。定义导致为对象分配存储空间。

据此,我推断{type} {variable_name}形式的语句是声明,而 first赋值语句即{variable_name} = {first_value}可以视为定义。

但是对于全局变量,声明是定义,因为声明如果未初始化,则会被赋予默认值。因此,在给定的代码中,在第4行,我应该使用默认值0进行初始化,然后在第5行,给我另一个值,即2 但在main()之外。

通常,全局变量在main内部初始化,并且不能为main外部分配这样的值。如果对其他任何类型的变量(例如局部变量)执行相同的操作,则不会引发错误。

this thread中提出了类似的问题。

我无法完全理解answer given by paxdiablo。它说在main()被编译之前,没有b 并给出了2个解决方案。要么在调用main()之前在声明变量b时将其尾部化,要么使用extern告诉编译器变量b在其他地方使用。

我使用前一种解决方案的方式略有不同。首先,我声明了全局变量i,然后在调用main()之前为其分配了一个值。

所以,为什么不能在main()之外的单独一行代码中定义全局变量(无论是否静态)或将其分配给值即使分配是在main()之前完成的?


注意:我刚刚开始学习C ++。因此,我的推论可能是错误的。在使用C ++之前,我使用python,因此对我来说了解C ++代码的初始化和编译顺序变得有些困难。因此,很抱歉给大家带来一些不便。

0 个答案:

没有答案