source: public/doc/gnu-c/Allocating-File_002dScope.html@ 02598c2

Last change on this file since 02598c2 was 02598c2, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:36:29 PM

Add gnu-c

  • Property mode set to 100644
File size: 4.7 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<!-- Copyright (C) 2022 Richard Stallman and Free Software Foundation, Inc.
4
5(The work of Trevis Rothwell and Nelson Beebe has been assigned or
6licensed to the FSF.)
7
8Permission is granted to copy, distribute and/or modify this document
9under the terms of the GNU Free Documentation License, Version 1.3 or
10any later version published by the Free Software Foundation; with the
11Invariant Sections being "GNU General Public License," with the
12Front-Cover Texts being "A GNU Manual," and with the Back-Cover
13Texts as in (a) below. A copy of the license is included in the
14section entitled "GNU Free Documentation License."
15
16(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
17modify this GNU manual. Buying copies from the FSF supports it in
18developing GNU and promoting software freedom." -->
19<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
20<head>
21<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
22<title>Allocating File-Scope (GNU C Language Manual)</title>
23
24<meta name="description" content="Allocating File-Scope (GNU C Language Manual)">
25<meta name="keywords" content="Allocating File-Scope (GNU C Language Manual)">
26<meta name="resource-type" content="document">
27<meta name="distribution" content="global">
28<meta name="Generator" content="makeinfo">
29<link href="index.html" rel="start" title="Top">
30<link href="Symbol-Index.html" rel="index" title="Symbol Index">
31<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
32<link href="Variables.html" rel="up" title="Variables">
33<link href="auto-and-register.html" rel="next" title="auto and register">
34<link href="Extern-Declarations.html" rel="prev" title="Extern Declarations">
35<style type="text/css">
36<!--
37a.summary-letter {text-decoration: none}
38blockquote.indentedblock {margin-right: 0em}
39div.display {margin-left: 3.2em}
40div.example {margin-left: 3.2em}
41div.lisp {margin-left: 3.2em}
42kbd {font-style: oblique}
43pre.display {font-family: inherit}
44pre.format {font-family: inherit}
45pre.menu-comment {font-family: serif}
46pre.menu-preformatted {font-family: serif}
47span.nolinebreak {white-space: nowrap}
48span.roman {font-family: initial; font-weight: normal}
49span.sansserif {font-family: sans-serif; font-weight: normal}
50ul.no-bullet {list-style: none}
51-->
52</style>
53
54
55</head>
56
57<body lang="en">
58<span id="Allocating-File_002dScope"></span><div class="header">
59<p>
60Next: <a href="auto-and-register.html" accesskey="n" rel="next">auto and register</a>, Previous: <a href="Extern-Declarations.html" accesskey="p" rel="prev">Extern Declarations</a>, Up: <a href="Variables.html" accesskey="u" rel="up">Variables</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Symbol-Index.html" title="Index" rel="index">Index</a>]</p>
61</div>
62<hr>
63<span id="Allocating-File_002dScope-Variables"></span><h3 class="section">20.9 Allocating File-Scope Variables</h3>
64<span id="index-allocation-file_002dscope-variables"></span>
65<span id="index-file_002dscope-variables_002c-allocating"></span>
66
67<p>Some file-scope declarations allocate space for the variable, and some
68don&rsquo;t.
69</p>
70<p>A file-scope declaration with an initial value <em>must</em> allocate
71space for the variable; if there are two of such declarations for the
72same variable, even in different compilation modules, they conflict.
73</p>
74<p>An <code>extern</code> declaration <em>never</em> allocates space for the variable.
75If all the top-level declarations of a certain variable are
76<code>extern</code>, the variable never gets memory space. If that variable
77is used anywhere in the program, the use will be reported as an error,
78saying that the variable is not defined.
79</p>
80<span id="index-tentative-definition"></span>
81<p>A file-scope declaration without an initial value is called a
82<em>tentative definition</em>. This is a strange hybrid: it <em>can</em>
83allocate space for the variable, but does not insist. So it causes no
84conflict, no error, if the variable has another declaration that
85allocates space for it, perhaps in another compilation module. But if
86nothing else allocates space for the variable, the tentative
87definition will do it. Any number of compilation modules can declare
88the same variable in this way, and that is sufficient for all of them
89to use the variable.
90</p>
91<p>In programs that are very large or have many contributors, it may be
92wise to adopt the convention of never using tentative definitions.
93You can use the compilation option <samp>-fno-common</samp> to make them
94an error, or <samp>--warn-common</samp> to warn about them.
95</p>
96<p>If a file-scope variable gets its space through a tentative
97definition, it starts out containing all zeros.
98</p>
99
100
101
102</body>
103</html>
Note: See TracBrowser for help on using the repository browser.