In
computer programming
Computer programming or coding is the composition of sequences of instructions, called computer program, programs, that computers can follow to perform tasks. It involves designing and implementing algorithms, step-by-step specifications of proc ...
, a global variable is a variable with global
scope, meaning that it is visible (hence accessible) throughout the program, unless
shadowed. The set of all global variables is known as the ''global environment'' or ''global state.'' In
compiled languages, global variables are generally
static variable
In computer programming, a static variable is a variable that has been allocated "statically", meaning that its lifetime (or "extent") is the entire run of the program. This is in contrast to shorter-lived automatic variables, whose storage is ...
s, whose
extent (lifetime) is the entire runtime of the program, though in
interpreted languages (including
command-line interpreter
A command-line interface (CLI) is a means of interacting with software via commands each formatted as a line of text. Command-line interfaces emerged in the mid-1960s, on computer terminals, as an interactive and more user-friendly alternativ ...
s), global variables are generally dynamically allocated when declared, since they are not known ahead of time.
In some languages, all variables are global, or global by default, while in most modern languages variables have limited scope, generally
lexical scope
In computer programming, the scope of a name binding (an association of a name to an entity, such as a variable) is the part of a program where the name binding is valid; that is, where the name can be used to refer to the entity. In other parts ...
, though global variables are often available by declaring a variable at the top level of the program. In other languages, however, global variables do not exist; these are generally
modular programming
Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect or "concern" of the d ...
languages that enforce a module structure, or
class-based object-oriented programming languages that enforce a class structure.
Use
Interaction mechanisms with global variables are called global environment (see also global state) mechanisms. The global environment paradigm is contrasted with the
local environment paradigm, where all variables are
local
Local may refer to:
Geography and transportation
* Local (train), a train serving local traffic demand
* Local, Missouri, a community in the United States
Arts, entertainment, and media
* ''Local'' (comics), a limited series comic book by Bria ...
with no
shared memory (and therefore all interactions can be reconducted to
message passing
In computer science, message passing is a technique for invoking behavior (i.e., running a program) on a computer. The invoking program sends a message to a process (which may be an actor or object) and relies on that process and its supporting ...
).
Global variables are used extensively to pass information between sections of code that do not share a caller/callee relation like concurrent threads and signal handlers. Languages (including C) where each file defines an implicit namespace eliminate most of the problems seen with languages with a global
namespace
In computing, a namespace is a set of signs (''names'') that are used to identify and refer to objects of various kinds. A namespace ensures that all of a given set of objects have unique names so that they can be easily identified.
Namespaces ...
though some problems may persist without proper encapsulation. Without proper locking (such as with a
mutex), code using global variables will not be
thread-safe except for read only values in
protected memory.
Environment variables
Environment variables
An environment variable is a user-definable Value (computer science), value that can affect the way running process (computing), processes will behave on a computer. Environment variables are part of the environment in which a process runs. Fo ...
are a facility provided by some
operating systems
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
. Within the OS's
shell
Shell may refer to:
Architecture and design
* Shell (structure), a thin structure
** Concrete shell, a thin shell of concrete, usually with no interior columns or exterior buttresses
Science Biology
* Seashell, a hard outer layer of a marine ani ...
(
ksh in
Unix
Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
,
bash in
Linux
Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
,
COMMAND.COM in
DOS and
CMD.EXE in
Windows
Windows is a Product lining, product line of Proprietary software, proprietary graphical user interface, graphical operating systems developed and marketed by Microsoft. It is grouped into families and subfamilies that cater to particular sec ...
) they are a kind of variable: for instance, in unix and related systems an ordinary variable becomes an environment variable when the
export
keyword is used. Program code other than shells has to access them by
API
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
calls, such as
getenv()
and
setenv()
.
They are local to the process in which they were set. That means if we open two terminal windows (Two different processes running shell) and change value of environment variable in one window, that change will not be seen by other window.
When a child process is created, it inherits all the environment variables and their values from the parent process. Usually, when a program calls another program, it first creates a child process by
forking, then the child adjusts the environment as needed and lastly the child
replaces itself with the program to be called. Child processes therefore cannot use environment variables to communicate with their peers, avoiding the action at a distance problem.
Global-only and global-by-default
A number of non-
structured
Structuring, also known as smurfing in banking jargon, is the practice of executing financial transactions such as making bank deposits in a specific pattern, calculated to avoid triggering financial institutions to file reports required by law ...
languages, such as (early versions of)
BASIC
Basic or BASIC may refer to:
Science and technology
* BASIC, a computer programming language
* Basic (chemistry), having the properties of a base
* Basic access authentication, in HTTP
Entertainment
* Basic (film), ''Basic'' (film), a 2003 film
...
,
COBOL
COBOL (; an acronym for "common business-oriented language") is a compiled English-like computer programming language designed for business use. It is an imperative, procedural, and, since 2002, object-oriented language. COBOL is primarily ...
and
Fortran I (1956) only provide global variables. Fortran II (1958) introduced subroutines with local variables, and the COMMON keyword for accessing global variables. Usage of COMMON in FORTRAN continued in FORTRAN 77, and influenced later languages such as PL/SQL. Named COMMON groups for globals behave somewhat like structured namespaces. Variables are also global by default in
Forth,
Lua,
Perl
Perl is a high-level, general-purpose, interpreted, dynamic programming language. Though Perl is not officially an acronym, there are various backronyms in use, including "Practical Extraction and Reporting Language".
Perl was developed ...
, and most shells.
By language
C and C++
The C language does not have a
global
keyword. However, variables declared outside a function have "file scope," meaning they are visible within the file. Variables declared with file scope are visible between their declaration and the end of the compilation unit (
.c
file) (unless shadowed by a like-named object in a nearer scope, such as a local variable); and they implicitly have external linkage and are thus visible to not only the
.c
file or
compilation unit
In C and C++ programming language terminology, a translation unit (or more casually a compilation unit) is the ultimate input to a C or C++ compiler from which an object file is generated. A translation unit roughly consists of a source file af ...
containing their declarations but also to every other compilation unit that is linked to form the complete program. External linkage, however, is not sufficient for such a variable's use in other files: for a compilation unit to correctly access such a global variable, it will need to know its type. This is accomplished by declaring the variable in each file using the
extern
keyword. (It will be ''declared'' in each file but may be ''defined'' in only one.) Such
extern
declarations are often placed in a shared header file, since it is common practice for all
.c
files in a project to include at least one
.h
file: the standard header file
errno.h
is an example, making the
errno
variable accessible to all modules in a project. Where this global access mechanism is judged problematic, it can be disabled using the
static
keyword which restricts a variable to file scope, and will cause attempts to import it with
extern
to raise a compilation (or linking) error.
An example of a "global" variable in
C:
#include
// This is the file-scope variable (with internal linkage), visible only in
// this compilation unit.
static int shared = 3;
// This one has external linkage (not limited to this compilation unit).
extern int over_shared;
// Also internal linkage.
int over_shared_too = 2;
static void ChangeShared()
static void LocalShadow()
static void ParamShadow(int shared)
int main()
As the variable is an external one, there is no need to pass it as a parameter to use it in a function besides main. It belongs to every function in the module.
The output will be:
3
5
5
5
Java
Some languages, like Java, don't have global variables. In Java, all variables that are not local variables are fields of a class. Hence all variables are in the scope of either a class or a method. In Java, static fields (also known as
class variables) exist independently of any instances of the class and one copy is shared among all instances; hence public static fields are used for many of the same purposes as global variables in other languages because of their similar "sharing" behavior:
public class Global
PHP
PHP has a
global
keyword and a number of unusual ways of using global variables.
Variables declared outside functions have file scope (which is for most purposes the widest scope). However, they are not accessible inside functions unless imported with the
global
keyword (i.e., the keyword ''accesses'' global variables, it does not ''declare'' them).
However, some predefined variables, known as ''superglobals'' are always accessible.
They are all arrays. A general purpose one is the
$GLOBALS
superglobal, which contains all the variables
defined out of function scope. Changes to its elements change the original variables, and additions create new variables.
The superglobals
$_POST
and
$_GET
are widely used in web programming.
Other languages
* In
Python and
MATLAB
MATLAB (an abbreviation of "MATrix LABoratory") is a proprietary multi-paradigm programming language and numeric computing environment developed by MathWorks. MATLAB allows matrix manipulations, plotting of functions and data, implementat ...
a global variable can be declared anywhere with the
global
keyword.
*
Ruby
Ruby is a pinkish-red-to-blood-red-colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapph ...
's global variables are distinguished by a '
$
'
sigil. A number of predefined globals exist, for instance
$$
is the current
process ID.
See also
*
Local variable
In computer science, a local variable is a variable that is given ''local scope''. A local variable reference in the function or block in which it is declared overrides the same variable name in the larger scope. In programming languages with ...
*
Non-local variable
In programming language theory, a non-local variable is a variable that is not defined in the local Scope (computer science), scope. While the term can refer to global variables, it is primarily used in the context of nested function, nested and ...
*
Singleton pattern
*
Variables
**
Static variable
In computer programming, a static variable is a variable that has been allocated "statically", meaning that its lifetime (or "extent") is the entire run of the program. This is in contrast to shorter-lived automatic variables, whose storage is ...
**
External variable
References
{{reflist
Variable (computer science)
de:Variable (Programmierung)#Variablen in einer Blockstruktur