我制作了 2 个项目,第一个项目使用 C 语言,第二个项目使用 C++ 语言,两者都具有相同的行为。
C项目:
header.h
int varGlobal=7;
main.c
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
void function(int i)
{
static int a=0;
a++;
int t=i;
i=varGlobal;
varGlobal=t;
printf("Call #%d:\ni=%d\nvarGlobal=%d\n\n",a,i,varGlobal,t);
}
int main() {
function(4);
function(6);
function(12);
return 0;
}
C++项目:
header.h
int varGlobal=7;
main.cpp
#include <iostream>
#include "header.h"
using namespace std;
void function(int i)
{
static int a=0;
int t=i;
a++;
i=varGlobal;
varGlobal=t;
cout<<"Call #"<<a<<":"<<endl<<"i="<<i<<endl<<"varGlobal="<<varGlobal<<endl<<endl;
}
int main() {
function(4);
function(6);
function(12);
return 0;
}
我读到全局变量是extern默认情况下,在 C 和staticC++ 中默认情况下;那么为什么 C++ 代码可以工作呢?
I mean int varGlobal=7;与静态 int varGlobal=7;如果它是静态的,那么它只能在声明的文件中使用,对吧?
全局变量不是extern
nor static
默认情况下在 C 和 C++ 上。
当您将变量声明为static
,您将其限制为当前源文件。如果你将其声明为extern
,你是说该变量存在,但在其他地方定义,并且如果你没有在其他地方定义它(没有extern
关键字)您将收到链接错误(未找到符号)。
当您有更多源文件(包括该标头)时,您的代码将会中断,在链接时您将有多个引用varGlobal
。如果你将其声明为static
,那么它将与多个源一起工作(我的意思是,它将编译和链接),但每个源都有自己的varGlobal
.
在 C++ 中可以做但在 C 中不能做的事情是将变量声明为const
在标题上,像这样:
const int varGlobal = 7;
并包含在多个源中,而不会在链接时破坏内容。这个想法是取代旧的C风格#define
为常数。
如果您需要一个在多个源上可见的全局变量而不是const
,将其声明为extern
在标题上,然后在源文件上定义它,这次没有 extern 关键字:
多个文件包含的标头:
extern int varGlobal;
在您的源文件之一中:
int varGlobal = 7;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)