<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://gunkies.org/index.php?action=history&amp;feed=atom&amp;title=Old_C_Changes</id>
		<title>Old C Changes - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://gunkies.org/index.php?action=history&amp;feed=atom&amp;title=Old_C_Changes"/>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Old_C_Changes&amp;action=history"/>
		<updated>2026-04-26T21:00:35Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.1</generator>

	<entry>
		<id>https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=28412&amp;oldid=prev</id>
		<title>Jnc: +cat to find it</title>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=28412&amp;oldid=prev"/>
				<updated>2023-01-16T12:52:33Z</updated>
		
		<summary type="html">&lt;p&gt;+cat to find it&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 12:52, 16 January 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l396&quot; &gt;Line 396:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 396:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category: UNIX Documentation]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: C Language]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: C Language]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jnc</name></author>	</entry>

	<entry>
		<id>https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=19979&amp;oldid=prev</id>
		<title>Jnc: new cat</title>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=19979&amp;oldid=prev"/>
				<updated>2018-12-17T00:22:15Z</updated>
		
		<summary type="html">&lt;p&gt;new cat&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 00:22, 17 December 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l396&quot; &gt;Line 396:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 396:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Languages&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category: &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;C Language&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki-wiki_:diff:version:1.11a:oldid:19421:newid:19979 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jnc</name></author>	</entry>

	<entry>
		<id>https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=19421&amp;oldid=prev</id>
		<title>Jnc: +cat</title>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=19421&amp;oldid=prev"/>
				<updated>2018-12-14T05:05:26Z</updated>
		
		<summary type="html">&lt;p&gt;+cat&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 05:05, 14 December 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l395&quot; &gt;Line 395:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 395:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category: Languages]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki-wiki_:diff:version:1.11a:oldid:17310:newid:19421 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jnc</name></author>	</entry>

	<entry>
		<id>https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=17310&amp;oldid=prev</id>
		<title>Jnc: Upload to the CHWiki</title>
		<link rel="alternate" type="text/html" href="https://gunkies.org/w/index.php?title=Old_C_Changes&amp;diff=17310&amp;oldid=prev"/>
				<updated>2018-08-24T20:45:08Z</updated>
		
		<summary type="html">&lt;p&gt;Upload to the CHWiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This is the contents of the 'Old C Changes' help file, which is believed to refer to [[Typesetter C]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
                            C Changes&lt;br /&gt;
&lt;br /&gt;
1.  Long integers&lt;br /&gt;
&lt;br /&gt;
The compiler implements 32-bit  integers.   The  associated  type&lt;br /&gt;
keyword  is `long'.  The word can act rather like an adjective in&lt;br /&gt;
that `long int' means a 32-bit integer and `long float' means the&lt;br /&gt;
same as `double.' But plain `long' is a long integer.  Essential-&lt;br /&gt;
ly  all  operations  on  longs  are   implemented   except   that&lt;br /&gt;
assignment-type  operators  do  not  have  values, so l1+(l2=+l3)&lt;br /&gt;
won't work.  Neither will l1 = l2 = 0.&lt;br /&gt;
&lt;br /&gt;
Long constants are written with a terminating `l' or  `L'.   E.g.&lt;br /&gt;
&amp;quot;123L&amp;quot;  or  &amp;quot;0177777777L&amp;quot; or &amp;quot;0X56789abcdL&amp;quot;.  The latter is a hex&lt;br /&gt;
constant, which could also have been  short;   it  is  marked  by&lt;br /&gt;
starting  with  &amp;quot;0X&amp;quot;.   Every  fixed decimal constant larger than&lt;br /&gt;
32767 is taken to be long, and so  are  octal  or  hex  constants&lt;br /&gt;
larger  than  0177777 (0Xffff, or 0xFFFF if you like).  A warning&lt;br /&gt;
is given in such a case since this is actually an incompatibility&lt;br /&gt;
with  the  older compiler.  Where the constant is just used as an&lt;br /&gt;
initializer or assigned to something it doesn't matter.  If it is&lt;br /&gt;
passed  to a subroutine then the routine will not get what it ex-&lt;br /&gt;
pected.&lt;br /&gt;
&lt;br /&gt;
When a short and a long integer are  operands  of  an  arithmetic&lt;br /&gt;
operator,  the  short is converted to long (with sign extension).&lt;br /&gt;
This is true also when a short is assigned to  a  long.   When  a&lt;br /&gt;
long  is  assigned to a short integer it is truncated at the high&lt;br /&gt;
order end with no notice of possible loss of significant  digits.&lt;br /&gt;
This is true as well when a long is added to a pointer (which in-&lt;br /&gt;
cludes its usage as a subscript).  The conversion rules  for  ex-&lt;br /&gt;
pressions  involving  doubles and floats mixed with longs are the&lt;br /&gt;
same as those for short integers, _�m_�u_�t_�a_�t_�i_�s _�m_�u_�t_�a_�n_�d_�i_�s.&lt;br /&gt;
&lt;br /&gt;
A point to note is that constant expressions involving longs  are&lt;br /&gt;
not  evaluated  at  compile  time, and may not be used where con-&lt;br /&gt;
stants are expected.  Thus&lt;br /&gt;
&lt;br /&gt;
        long x {5000L*5000L};&lt;br /&gt;
&lt;br /&gt;
is illegal;&lt;br /&gt;
&lt;br /&gt;
        long x {5000*5000};&lt;br /&gt;
&lt;br /&gt;
is legal but wrong because the high-order part is lost;  but both&lt;br /&gt;
&lt;br /&gt;
        long x 25000000L;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
        long x 25.e6;&lt;br /&gt;
&lt;br /&gt;
are correct and have the same meaning because the double constant&lt;br /&gt;
is converted to long at compile time.&lt;br /&gt;
&lt;br /&gt;
2.  Unsigned integers&lt;br /&gt;
&lt;br /&gt;
A new fundamental data type with keyword  `unsigned,'  is  avail-&lt;br /&gt;
able.  It may be used alone:&lt;br /&gt;
&lt;br /&gt;
        unsigned u;&lt;br /&gt;
&lt;br /&gt;
or as an adjective with `int'&lt;br /&gt;
&lt;br /&gt;
        unsigned int u;&lt;br /&gt;
&lt;br /&gt;
with the same meaning.  There are not yet (or possibly ever)  un-&lt;br /&gt;
signed  longs  or  chars.  The meaning of an unsigned variable is&lt;br /&gt;
that of an integer modulo 2^n, where n is 16 on the PDP-11.   All&lt;br /&gt;
operators  whose operands are unsigned produce results consistent&lt;br /&gt;
with this interpretation except division and remainder where  the&lt;br /&gt;
divisor  is larger than 32767; then the result is incorrect.  The&lt;br /&gt;
dividend in an unsigned division may however have any value (i.e.&lt;br /&gt;
up  to  65535)  with  correct  results.  Right shifts of unsigned&lt;br /&gt;
quantities are guaranteed to be logical shifts.&lt;br /&gt;
&lt;br /&gt;
When an ordinary integer and an  unsigned  integer  are  combined&lt;br /&gt;
then  the ordinary integer is mapped into an integer mod 2^16 and&lt;br /&gt;
the result is unsigned.  Thus, for example `u =  -1'  results  in&lt;br /&gt;
assigning  65535  to  u.   This is mathematically reasonable, and&lt;br /&gt;
also happens to involve no run-time overhead.&lt;br /&gt;
&lt;br /&gt;
When an unsigned integer is assigned to a plain integer, an  (un-&lt;br /&gt;
diagnosed)  overflow  occurs  when  the  unsigned integer exceeds&lt;br /&gt;
2^15-1.&lt;br /&gt;
&lt;br /&gt;
It is intended that unsigned integers be used in  contexts  where&lt;br /&gt;
previously  character  pointers  were used (artificially and non-&lt;br /&gt;
portably) to represent unsigned integers.&lt;br /&gt;
&lt;br /&gt;
3.  Block structure.&lt;br /&gt;
&lt;br /&gt;
A sequence of declarations may now appear at the beginning of any&lt;br /&gt;
compound statement in {}.  The variables declared thereby are lo-&lt;br /&gt;
cal to the compound statement.  Any declarations of the same name&lt;br /&gt;
existing  before  the  block  was entered are pushed down for the&lt;br /&gt;
duration of the block.  Just as in  functions,  as  before,  auto&lt;br /&gt;
variables disappear and lose their values when the block is left;&lt;br /&gt;
static variables retain their values.  Also according to the same&lt;br /&gt;
rules  as for the declarations previously allowed at the start of&lt;br /&gt;
functions, if no storage class is mentioned in a declaration  the&lt;br /&gt;
default is automatic.&lt;br /&gt;
&lt;br /&gt;
Implementation of inner-block declarations is such that there  is&lt;br /&gt;
no run-time cost associated with using them.&lt;br /&gt;
&lt;br /&gt;
4.  Initialization (part 1)&lt;br /&gt;
&lt;br /&gt;
This compiler properly handles initialization  of  structures  so&lt;br /&gt;
the construction&lt;br /&gt;
&lt;br /&gt;
        struct { char name[8]; char type; float val; } x&lt;br /&gt;
                { &amp;quot;abc&amp;quot;, 'a', 123.4 };&lt;br /&gt;
&lt;br /&gt;
compiles correctly.  In particular  it  is  recognized  that  the&lt;br /&gt;
string  is  supposed  to  fill an 8-character array, the `a' goes&lt;br /&gt;
into a character, and that the 123.4 must be rounded  and  placed&lt;br /&gt;
in  a  single-precision  cell.   Structures  of arrays, arrays of&lt;br /&gt;
structures, and the like all work;  a more formal description  of&lt;br /&gt;
what is done follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;initializer&amp;gt; ::= &amp;lt;element&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;element&amp;gt; ::= &amp;lt;expression&amp;gt; | &amp;lt;element&amp;gt; , &amp;lt;element&amp;gt; |&lt;br /&gt;
                { &amp;lt;element&amp;gt; } | { &amp;lt;element&amp;gt; , }&lt;br /&gt;
&lt;br /&gt;
An element is an expression or a comma-separated sequence of ele-&lt;br /&gt;
ments possibly enclosed in braces.  In a brace-enclosed sequence,&lt;br /&gt;
a comma is optional after the last element.  This very  ambiguous&lt;br /&gt;
definition  is  parsed  as described below.  &amp;quot;Expression&amp;quot; must of&lt;br /&gt;
course be a constant expression within the  previous  meaning  of&lt;br /&gt;
the Act.&lt;br /&gt;
&lt;br /&gt;
An initializer for a non-structured scalar is an element with ex-&lt;br /&gt;
actly one expression in it.&lt;br /&gt;
&lt;br /&gt;
An &amp;quot;aggregate&amp;quot; is a structure or an array.   If  the  initializer&lt;br /&gt;
for  an  aggregate  begins with a left brace, then the succeeding&lt;br /&gt;
comma-separated sequence of elements initialize  the  members  of&lt;br /&gt;
the  aggregate.  It is erroneous for the number of members in the&lt;br /&gt;
sequence to exceed the number of elements in the  aggregate.   If&lt;br /&gt;
the sequence has too few members the aggregate is padded.&lt;br /&gt;
&lt;br /&gt;
If the initializer for an aggregate does not begin  with  a  left&lt;br /&gt;
brace,  then  the  members  of the aggregate are initialized with&lt;br /&gt;
successive elements from the succeeding comma-separated sequence.&lt;br /&gt;
If the sequence terminates before the aggregate is filled the ag-&lt;br /&gt;
gregate is padded.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;top level&amp;quot; initializer is the object  which  initializes  an&lt;br /&gt;
external  object  itself,  as opposed to one of its members.  The&lt;br /&gt;
top level initializer for an aggregate must  begin  with  a  left&lt;br /&gt;
brace.&lt;br /&gt;
&lt;br /&gt;
If the top-level object being initialized is an array and if  its&lt;br /&gt;
size is omitted in the declaration, e.g. &amp;quot;int a[]&amp;quot;, then the size&lt;br /&gt;
is calculated from the number of elements which initialized it.&lt;br /&gt;
&lt;br /&gt;
Short of complete assimilation of this description, there are two&lt;br /&gt;
simple  approaches  to the initialization of complicated objects.&lt;br /&gt;
First, observe that it is always legal to initialize  any  object&lt;br /&gt;
with  a  comma-separated sequence of expressions.  The members of&lt;br /&gt;
every structure and array are stored in a specified order, so the&lt;br /&gt;
expressions which initialize these members may if desired be laid&lt;br /&gt;
out in a row to successively,  and  recursively,  initialize  the&lt;br /&gt;
members.&lt;br /&gt;
&lt;br /&gt;
Alternatively, the sequences of expressions which initialize  ar-&lt;br /&gt;
rays or structures may uniformly be enclosed in braces.&lt;br /&gt;
&lt;br /&gt;
5.  Initialization (part 2)&lt;br /&gt;
&lt;br /&gt;
Declarations, whether external, at the head of functions,  or  in&lt;br /&gt;
inner blocks may have initializations whose syntax is the same as&lt;br /&gt;
previous external declarations with  initializations.   The  only&lt;br /&gt;
restrictions  are that automatic structures and arrays may not be&lt;br /&gt;
initialized (they can't be assigned either); nor, for the  moment&lt;br /&gt;
at least, may external variables when declared inside a function.&lt;br /&gt;
&lt;br /&gt;
The declarations and initializations should be thought of as  oc-&lt;br /&gt;
curring  in lexical order so that forward references in initiali-&lt;br /&gt;
zations are unlikely to work.  E.g.,&lt;br /&gt;
&lt;br /&gt;
        { int a a;&lt;br /&gt;
          int b c;&lt;br /&gt;
          int c 5;&lt;br /&gt;
          ...&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
Here a is initialized by itself (and  its  value  is  thus  unde-&lt;br /&gt;
fined); b is initialized with the old value of c (which is either&lt;br /&gt;
undefined or any c declared in an outer block).&lt;br /&gt;
&lt;br /&gt;
6.  Bit fields&lt;br /&gt;
&lt;br /&gt;
A declarator inside a structure may have the form&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;declarator&amp;gt; : &amp;lt;constant&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which specifies that the object declared is stored in a field the&lt;br /&gt;
number of bits in which is specified by the constant.  If several&lt;br /&gt;
such things are stacked up next to each other then  the  compiler&lt;br /&gt;
allocates  the  fields from right to left, going to the next word&lt;br /&gt;
when the new field will not fit.  The declarator  may  also  have&lt;br /&gt;
the form&lt;br /&gt;
&lt;br /&gt;
        : &amp;lt;constant&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which allocates an unnamed field to simplify  accurate  modelling&lt;br /&gt;
of  things  like  hardware formats where there are unused fields.&lt;br /&gt;
Finally,&lt;br /&gt;
&lt;br /&gt;
        : 0&lt;br /&gt;
&lt;br /&gt;
means to force the next field to start on a word boundary.&lt;br /&gt;
&lt;br /&gt;
The types of bit fields can be only &amp;quot;int&amp;quot; or  &amp;quot;char&amp;quot;.   The  only&lt;br /&gt;
difference  between  the  two is in the alignment and length res-&lt;br /&gt;
trictions:  no int field can be longer than 16 bits, nor any char&lt;br /&gt;
longer  than  8  bits.   If  a  char  field will not fit into the&lt;br /&gt;
current character, then it is moved  up  to  the  next  character&lt;br /&gt;
boundary.&lt;br /&gt;
&lt;br /&gt;
Both int and char fields are taken to be unsigned  (non-negative)&lt;br /&gt;
integers.&lt;br /&gt;
&lt;br /&gt;
Bit-field variables are not quite full-class citizens.   Although&lt;br /&gt;
most  operators  can  be  applied  to  them, including assignment&lt;br /&gt;
operators, they do not have addresses  (i.e.  there  are  no  bit&lt;br /&gt;
pointers) so the unary &amp;amp; operator cannot be applied to them.  For&lt;br /&gt;
essentially this reason there are no arrays of  bit  field  vari-&lt;br /&gt;
ables.&lt;br /&gt;
&lt;br /&gt;
There are three twoes in the implementation:  addition  (=+)  ap-&lt;br /&gt;
plied  to  fields  can result in an overflow into the next field;&lt;br /&gt;
it is not possible to initialize bit fields.&lt;br /&gt;
&lt;br /&gt;
7.  Macro preprocessor&lt;br /&gt;
&lt;br /&gt;
The proprocessor handles `define' statements  with  formal  argu-&lt;br /&gt;
ments.  The line&lt;br /&gt;
&lt;br /&gt;
        #define macro(a1,...,an) ...a1...an...&lt;br /&gt;
&lt;br /&gt;
is recognized by the presence of a left parenthesis following the&lt;br /&gt;
defined name.  When the form&lt;br /&gt;
&lt;br /&gt;
        macro(b1,...,bn)&lt;br /&gt;
&lt;br /&gt;
is recognized in normal C program text, it is replaced by the de-&lt;br /&gt;
finition,  with  the corresponding _�b_�i actual argument string sub-&lt;br /&gt;
stituted for the corresponding _�a_�i formal arguments.  Both  actual&lt;br /&gt;
and  formal  arguments  are  separated  by commas not included in&lt;br /&gt;
parentheses; the formal arguments have the syntax of names.&lt;br /&gt;
&lt;br /&gt;
Macro expansions are no longer surrounded by  spaces.   Lines  in&lt;br /&gt;
which a replacement has taken place are rescanned until no macros&lt;br /&gt;
remain.&lt;br /&gt;
&lt;br /&gt;
The preprocessor has a rudimentary conditional facility.  A  line&lt;br /&gt;
of the form&lt;br /&gt;
&lt;br /&gt;
        #ifdef name&lt;br /&gt;
&lt;br /&gt;
is ignored if `name' is defined to the preprocessor (i.e. was the&lt;br /&gt;
subject  of  a  `define'  line).  If name is not defined then all&lt;br /&gt;
lines through a line of the form&lt;br /&gt;
&lt;br /&gt;
        #endif&lt;br /&gt;
&lt;br /&gt;
are ignored.  A corresponding form is&lt;br /&gt;
&lt;br /&gt;
        #ifndef name&lt;br /&gt;
        ...&lt;br /&gt;
        #endif&lt;br /&gt;
&lt;br /&gt;
which ignores the intervening lines  unless  `name'  is  defined.&lt;br /&gt;
The name `unix' is predefined and replaced by itself to aid writ-&lt;br /&gt;
ers of C programs which are expected to be transported  to  other&lt;br /&gt;
machines with C compilers.&lt;br /&gt;
&lt;br /&gt;
In connection with this, there is a new option to the cc command:&lt;br /&gt;
&lt;br /&gt;
        cc -Dname&lt;br /&gt;
&lt;br /&gt;
which causes `name' to be defined to the  preprocessor  (and  re-&lt;br /&gt;
placed  by  itself).   This can be used together with conditional&lt;br /&gt;
preprocessor statements to select variant versions of  a  program&lt;br /&gt;
at compile time.&lt;br /&gt;
&lt;br /&gt;
The previous two facilities (macros with  arguments,  conditional&lt;br /&gt;
compilation)  were  actually available in the 6th Edition system,&lt;br /&gt;
but undocumented.  New in this release of the cc command  is  the&lt;br /&gt;
ability  to nest `include' files.  Preprocessor include lines may&lt;br /&gt;
have the new form&lt;br /&gt;
&lt;br /&gt;
        #include &amp;lt;file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the angle brackets replace double quotes.   In  this  case,&lt;br /&gt;
the  file  name  is  prepended  with  a  standard  prefix, namely&lt;br /&gt;
`/usr/include'.  In is intended that commonly-used include  files&lt;br /&gt;
be  placed  in this directory;  the convention reduces the depen-&lt;br /&gt;
dence on system-specific naming conventions.  The standard prefix&lt;br /&gt;
can be replaced by the cc command option `-I':&lt;br /&gt;
&lt;br /&gt;
        cc -Iotherdirectory&lt;br /&gt;
&lt;br /&gt;
8.  Registers&lt;br /&gt;
&lt;br /&gt;
A formal argument may be given the storage class `register.' When&lt;br /&gt;
this occurs the save sequence copies it from the place the caller&lt;br /&gt;
left it into a fast register;  all usual restrictions on its  use&lt;br /&gt;
are the same as for ordinary register variables.&lt;br /&gt;
&lt;br /&gt;
Now any variable inside a function may be declared `register;' if&lt;br /&gt;
the  type is unsuitable, or if there are more than three register&lt;br /&gt;
declarations, then the compiler makes  it  `auto'  instead.   The&lt;br /&gt;
restriction  that the &amp;amp; operator may not be applied to a register&lt;br /&gt;
remains.&lt;br /&gt;
&lt;br /&gt;
9.  Mode declarations&lt;br /&gt;
&lt;br /&gt;
A declaration of the form&lt;br /&gt;
&lt;br /&gt;
        typedef type-specifier declarator ;&lt;br /&gt;
&lt;br /&gt;
makes the name given in the declarator into the equivalent  of  a&lt;br /&gt;
keyword specifying the type which the name would have in an ordi-&lt;br /&gt;
nary declaration.  Thus&lt;br /&gt;
&lt;br /&gt;
        typedef int *iptr;&lt;br /&gt;
&lt;br /&gt;
makes `iptr' usable in  declarations  of  pointers  to  integers;&lt;br /&gt;
subsequently the declarations&lt;br /&gt;
&lt;br /&gt;
        iptr ip;&lt;br /&gt;
        int *ip;&lt;br /&gt;
&lt;br /&gt;
would mean the same thing.  Type names  introduced  in  this  way&lt;br /&gt;
obey the same scope rules as ordinary variables.  The facility is&lt;br /&gt;
new, experimental, and probably buggy.&lt;br /&gt;
&lt;br /&gt;
10.  Top-level static&lt;br /&gt;
&lt;br /&gt;
The storage class `static' can be specified in top-level declara-&lt;br /&gt;
tions.  Names declared thereby are global to the rest of the file&lt;br /&gt;
in which they appear (except as modified by block structure,  see&lt;br /&gt;
3  above)  but  are  unconnected  with names in programs in other&lt;br /&gt;
files.  This may be useful to systems of library  routines  which&lt;br /&gt;
want to keep their internal interfaces hidden.&lt;br /&gt;
&lt;br /&gt;
11. Restrictions&lt;br /&gt;
&lt;br /&gt;
The compiler is somewhat stickier about some  constructions  that&lt;br /&gt;
used to be accepted.&lt;br /&gt;
&lt;br /&gt;
One difference is that external declarations  made  inside  func-&lt;br /&gt;
tions  are  remembered  to the end of the file, that is even past&lt;br /&gt;
the end of the function.  The most  frequent  problem  that  this&lt;br /&gt;
causes  is  that implicit declaration of a function as an integer&lt;br /&gt;
in one routine, and subsequent  explicit  declaration  of  it  as&lt;br /&gt;
another  type, is not allowed.  This turned out to affect several&lt;br /&gt;
source programs distributed with the system.&lt;br /&gt;
&lt;br /&gt;
It is now required that all forward references to labels inside a&lt;br /&gt;
function  be  the subject of a `goto.' This has turned out to af-&lt;br /&gt;
fect mainly people who pass a label to the routine `setexit.'  In&lt;br /&gt;
fact  a  routine  is  supposed to be passed here, and why a label&lt;br /&gt;
worked I do not know.&lt;br /&gt;
&lt;br /&gt;
In general this compiler makes it more  difficult  to  use  label&lt;br /&gt;
variables.   Think  of  this as a contribution to structured pro-&lt;br /&gt;
gramming.&lt;br /&gt;
&lt;br /&gt;
The compiler now checks multiple declarations of  the  same  name&lt;br /&gt;
more  carefully  for  consistency.  It used to be possible to de-&lt;br /&gt;
clare the same name to be  a  pointer  to  different  structures;&lt;br /&gt;
this  is  caught.   So  too are declarations of the same array as&lt;br /&gt;
having different sizes.  The exception is that array declarations&lt;br /&gt;
with empty brackets may be used in conjunction with a declaration&lt;br /&gt;
with a specified size.  Thus&lt;br /&gt;
&lt;br /&gt;
        int a[];          int a[50];&lt;br /&gt;
&lt;br /&gt;
is acceptable (in either order).&lt;br /&gt;
&lt;br /&gt;
An external array all of whose definitions involve empty brackets&lt;br /&gt;
is  diagnosed  as `undefined' by the loader;  it used to be taken&lt;br /&gt;
as having 1 element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jnc</name></author>	</entry>

	</feed>