Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
946f2aa8
Commit
946f2aa8
authored
Mar 21, 1997
by
Paul Eggert
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Formerly cpp.texi.~28~
From-SVN: r13759
parent
6fafc523
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
30 additions
and
24 deletions
+30
-24
gcc/cpp.texi
+30
-24
No files found.
gcc/cpp.texi
View file @
946f2aa8
...
@@ -45,7 +45,7 @@ into another language, under the above conditions for modified versions.
...
@@ -45,7 +45,7 @@ into another language, under the above conditions for modified versions.
@titlepage
@titlepage
@c
@finalout
@c
@finalout
@title
The
C
Preprocessor
@title
The
C
Preprocessor
@subtitle
Last
revised
July
1992
@subtitle
Last
revised
March
1997
@subtitle
for
GCC
version
2
@subtitle
for
GCC
version
2
@author
Richard
M
.
Stallman
@author
Richard
M
.
Stallman
@page
@page
...
@@ -54,7 +54,7 @@ This booklet is eventually intended to form the first chapter of a GNU
...
@@ -54,7 +54,7 @@ This booklet is eventually intended to form the first chapter of a GNU
C
Language
manual
.
C
Language
manual
.
@vskip
0
pt
plus
1
filll
@vskip
0
pt
plus
1
filll
Copyright
@copyright
{}
1987
,
1989
,
1991
,
1992
,
1993
,
1994
,
1995
Free
Copyright
@copyright
{}
1987
,
1989
,
1991
,
1992
,
1993
,
1994
,
1995
,
1996
,
1997
Free
Software
Foundation
,
Inc
.
Software
Foundation
,
Inc
.
Permission
is
granted
to
make
and
distribute
verbatim
copies
of
Permission
is
granted
to
make
and
distribute
verbatim
copies
of
...
@@ -105,7 +105,7 @@ to inform the compiler of where each source line originally came from.
...
@@ -105,7 +105,7 @@ to inform the compiler of where each source line originally came from.
C
preprocessors
vary
in
some
details
.
This
manual
discusses
the
GNU
C
C
preprocessors
vary
in
some
details
.
This
manual
discusses
the
GNU
C
preprocessor
,
the
C
Compatible
Compiler
Preprocessor
.
The
GNU
C
preprocessor
,
the
C
Compatible
Compiler
Preprocessor
.
The
GNU
C
preprocessor
provides
a
superset
of
the
features
of
ANSI
Standard
C
.
preprocessor
provides
a
superset
of
the
features
of
ANSI
Standard
C
@
.
ANSI
Standard
C
requires
the
rejection
of
many
harmless
constructs
commonly
ANSI
Standard
C
requires
the
rejection
of
many
harmless
constructs
commonly
used
by
today
'
s
C
programs
.
Such
incompatibility
would
be
inconvenient
for
used
by
today
'
s
C
programs
.
Such
incompatibility
would
be
inconvenient
for
...
@@ -115,6 +115,12 @@ options @samp{-trigraphs}, @samp{-undef} and @samp{-pedantic}, but in
...
@@ -115,6 +115,12 @@ options @samp{-trigraphs}, @samp{-undef} and @samp{-pedantic}, but in
practice
the
consequences
of
having
strict
ANSI
Standard
C
make
it
practice
the
consequences
of
having
strict
ANSI
Standard
C
make
it
undesirable
to
do
this
.
@xref
{
Invocation
}.
undesirable
to
do
this
.
@xref
{
Invocation
}.
The
C
preprocessor
is
designed
for
C
-
like
languages
;
you
may
run
into
problems
if
you
apply
it
to
other
kinds
of
languages
,
because
it
assumes
that
it
is
dealing
with
C
@
.
For
example
,
the
C
preprocessor
sometimes
outputs
extra
white
space
to
avoid
inadvertent
C
token
concatenation
,
and
this
may
cause
problems
with
other
languages
.
@menu
@menu
*
Global
Actions
::
Actions
made
uniformly
on
all
input
files
.
*
Global
Actions
::
Actions
made
uniformly
on
all
input
files
.
*
Directives
::
General
syntax
of
preprocessing
directives
.
*
Directives
::
General
syntax
of
preprocessing
directives
.
...
@@ -490,14 +496,14 @@ names, then inheritance is straightforward: simply write @samp{#include
...
@@ -490,14 +496,14 @@ names, then inheritance is straightforward: simply write @samp{#include
Sometimes
it
is
necessary
to
give
the
inheriting
file
the
same
name
as
Sometimes
it
is
necessary
to
give
the
inheriting
file
the
same
name
as
the
base
file
.
This
is
less
straightforward
.
the
base
file
.
This
is
less
straightforward
.
For
example
,
suppose
an
application
program
uses
the
system
header
file
For
example
,
suppose
an
application
program
uses
the
system
header
@file{
sys
/
signal
.
h
}
,
but
the
version
of
@file{
/
usr
/
include
/
sys
/
signal
.
h
}
@file{
sys
/
signal
.
h
}
,
but
the
version
of
@file{
/
usr
/
include
/
sys
/
signal
.
h
}
on
a
particular
system
doesn
'
t
do
what
the
application
program
expects
.
on
a
particular
system
doesn
'
t
do
what
the
application
program
expects
.
It
might
be
convenient
to
define
a
``
local
''
version
,
perhaps
under
the
It
might
be
convenient
to
define
a
``
local
''
version
,
perhaps
under
the
name
@file{
/
usr
/
local
/
include
/
sys
/
signal
.
h
}
,
to
override
or
add
to
the
name
@file{
/
usr
/
local
/
include
/
sys
/
signal
.
h
}
,
to
override
or
add
to
the
one
supplied
by
the
system
.
one
supplied
by
the
system
.
You
can
do
this
by
using
the
option
@samp{
-
I
.
}
for
compilation
,
and
You
can
do
this
by
compiling
with
the
option
@samp{
-
I
.
}
,
and
writing
a
file
@file{
sys
/
signal
.
h
}
that
does
what
the
application
writing
a
file
@file{
sys
/
signal
.
h
}
that
does
what
the
application
program
expects
.
But
making
this
file
include
the
standard
program
expects
.
But
making
this
file
include
the
standard
@file{
sys
/
signal
.
h
}
is
not
so
easy
---
writing
@samp{#
include
@file{
sys
/
signal
.
h
}
is
not
so
easy
---
writing
@samp{#
include
...
@@ -521,8 +527,8 @@ file directories @emph{after} the directory in which the current file
...
@@ -521,8 +527,8 @@ file directories @emph{after} the directory in which the current file
was
found
.
was
found
.
Suppose
you
specify
@samp
{
-
I
/
usr
/
local
/
include
},
and
the
list
of
Suppose
you
specify
@samp
{
-
I
/
usr
/
local
/
include
},
and
the
list
of
directories
to
search
also
includes
@file
{
/
usr
/
include
};
and
suppose
that
directories
to
search
also
includes
@file
{
/
usr
/
include
};
and
suppose
both
directories
contain
a
file
named
@file
{
sys
/
signal
.
h
}.
Ordinary
both
directories
contain
@file
{
sys
/
signal
.
h
}.
Ordinary
@samp
{
#
include
<
sys
/
signal
.
h
>
}
finds
the
file
under
@samp
{
#
include
<
sys
/
signal
.
h
>
}
finds
the
file
under
@file
{
/
usr
/
local
/
include
}.
If
that
file
contains
@samp
{
#
include_next
@file
{
/
usr
/
local
/
include
}.
If
that
file
contains
@samp
{
#
include_next
<
sys
/
signal
.
h
>
},
it
starts
searching
after
that
directory
,
and
finds
the
<
sys
/
signal
.
h
>
},
it
starts
searching
after
that
directory
,
and
finds
the
...
@@ -671,7 +677,7 @@ values, as it is defined in many C programs:
...
@@ -671,7 +677,7 @@ values, as it is defined in many C programs:
@end
example
@end
example
@noindent
@noindent
(
This
is
not
the
best
way
to
define
a
``
minimum
''
macro
in
GNU
C
.
(
This
is
not
the
best
way
to
define
a
``
minimum
''
macro
in
GNU
C
@
.
@xref
{
Side
Effects
},
for
more
information
.)
@xref
{
Side
Effects
},
for
more
information
.)
To
use
a
macro
that
expects
arguments
,
you
write
the
name
of
the
macro
To
use
a
macro
that
expects
arguments
,
you
write
the
name
of
the
macro
...
@@ -814,7 +820,7 @@ system-specific macros.
...
@@ -814,7 +820,7 @@ system-specific macros.
@cindex
standard
predefined
macros
@cindex
standard
predefined
macros
The
standard
predefined
macros
are
available
with
the
same
meanings
The
standard
predefined
macros
are
available
with
the
same
meanings
regardless
of
the
machine
or
operating
system
on
which
you
are
using
GNU
C
.
regardless
of
the
machine
or
operating
system
on
which
you
are
using
GNU
C
@
.
Their
names
all
start
and
end
with
double
underscores
.
Those
preceding
Their
names
all
start
and
end
with
double
underscores
.
Those
preceding
@code
{
__GNUC__
}
in
this
table
are
standardized
by
ANSI
C
;
the
rest
are
@code
{
__GNUC__
}
in
this
table
are
standardized
by
ANSI
C
;
the
rest
are
GNU
C
extensions
.
GNU
C
extensions
.
...
@@ -872,7 +878,7 @@ eight characters and looks like @samp{"23:59:01"}.
...
@@ -872,7 +878,7 @@ eight characters and looks like @samp{"23:59:01"}.
@item
__STDC__
@item
__STDC__
@findex
__STDC__
@findex
__STDC__
This
macro
expands
to
the
constant
1
,
to
signify
that
this
is
ANSI
This
macro
expands
to
the
constant
1
,
to
signify
that
this
is
ANSI
Standard
C
.
(
Whether
that
is
actually
true
depends
on
what
C
compiler
Standard
C
@
.
(
Whether
that
is
actually
true
depends
on
what
C
compiler
will
operate
on
the
output
from
the
preprocessor
.)
will
operate
on
the
output
from
the
preprocessor
.)
@item
__STDC_VERSION__
@item
__STDC_VERSION__
...
@@ -887,7 +893,7 @@ will operate on the output from the preprocessor.
...
@@ -887,7 +893,7 @@ will operate on the output from the preprocessor.
@item
__GNUC__
@item
__GNUC__
@findex
__GNUC__
@findex
__GNUC__
This
macro
is
defined
if
and
only
if
this
is
GNU
C
.
This
macro
is
This
macro
is
defined
if
and
only
if
this
is
GNU
C
@
.
This
macro
is
defined
only
when
the
entire
GNU
C
compiler
is
in
use
;
if
you
invoke
the
defined
only
when
the
entire
GNU
C
compiler
is
in
use
;
if
you
invoke
the
preprocessor
directly
,
@samp
{
__GNUC__
}
is
undefined
.
The
value
preprocessor
directly
,
@samp
{
__GNUC__
}
is
undefined
.
The
value
identifies
the
major
version
number
of
GNU
CC
(
@samp
{
1
}
for
GNU
CC
identifies
the
major
version
number
of
GNU
CC
(
@samp
{
1
}
for
GNU
CC
...
@@ -922,7 +928,7 @@ This macro is defined if and only if the @samp{-ansi} switch was
...
@@ -922,7 +928,7 @@ This macro is defined if and only if the @samp{-ansi} switch was
specified
when
GNU
C
was
invoked
.
Its
definition
is
the
null
string
.
specified
when
GNU
C
was
invoked
.
Its
definition
is
the
null
string
.
This
macro
exists
primarily
to
direct
certain
GNU
header
files
not
to
This
macro
exists
primarily
to
direct
certain
GNU
header
files
not
to
define
certain
traditional
Unix
constructs
which
are
incompatible
with
define
certain
traditional
Unix
constructs
which
are
incompatible
with
ANSI
C
.
ANSI
C
@
.
@item
__BASE_FILE__
@item
__BASE_FILE__
@findex
__BASE_FILE__
@findex
__BASE_FILE__
...
@@ -941,7 +947,7 @@ the nesting level is zero.
...
@@ -941,7 +947,7 @@ the nesting level is zero.
@item
__VERSION__
@item
__VERSION__
@findex
__VERSION__
@findex
__VERSION__
This
macro
expands
to
a
string
which
describes
the
version
number
of
This
macro
expands
to
a
string
which
describes
the
version
number
of
GNU
C
.
The
string
is
normally
a
sequence
of
decimal
numbers
separated
GNU
C
@
.
The
string
is
normally
a
sequence
of
decimal
numbers
separated
by
periods
,
such
as
@samp
{
"2.6.0"
}.
The
only
reasonable
use
of
this
by
periods
,
such
as
@samp
{
"2.6.0"
}.
The
only
reasonable
use
of
this
macro
is
to
incorporate
it
into
a
string
constant
.
macro
is
to
incorporate
it
into
a
string
constant
.
...
@@ -1240,7 +1246,7 @@ possible to piece together a string constant. However, two pieces of text
...
@@ -1240,7 +1246,7 @@ possible to piece together a string constant. However, two pieces of text
that
don
'
t
together
form
a
valid
lexical
unit
cannot
be
concatenated
.
For
that
don
'
t
together
form
a
valid
lexical
unit
cannot
be
concatenated
.
For
example
,
concatenation
with
@samp{
x
}
on
one
side
and
@samp{
+
}
on
the
other
example
,
concatenation
with
@samp{
x
}
on
one
side
and
@samp{
+
}
on
the
other
is
not
meaningful
because
those
two
characters
can
'
t
fit
together
in
any
is
not
meaningful
because
those
two
characters
can
'
t
fit
together
in
any
lexical
unit
of
C
.
The
ANSI
standard
says
that
such
attempts
at
lexical
unit
of
C
@
.
The
ANSI
standard
says
that
such
attempts
at
concatenation
are
undefined
,
but
in
the
GNU
C
preprocessor
it
is
well
concatenation
are
undefined
,
but
in
the
GNU
C
preprocessor
it
is
well
defined:
it
puts
the
@samp{
x
}
and
@samp{
+
}
side
by
side
with
no
particular
defined:
it
puts
the
@samp{
x
}
and
@samp{
+
}
side
by
side
with
no
particular
special
results
.
special
results
.
...
@@ -1440,7 +1446,7 @@ Defining the macro as
...
@@ -1440,7 +1446,7 @@ Defining the macro as
@noindent
@noindent
provides the desired result.
provides the desired result.
However, u
nintended grouping can result in another way. Consider
U
nintended grouping can result in another way. Consider
@samp{sizeof ceil_div(1, 2)}. That has the appearance of a C expression
@samp{sizeof ceil_div(1, 2)}. That has the appearance of a C expression
that would compute the size of the type of @samp{ceil_div (1, 2)}, but in
that would compute the size of the type of @samp{ceil_div (1, 2)}, but in
fact it means something very different. Here is what it expands to:
fact it means something very different. Here is what it expands to:
...
@@ -1961,7 +1967,7 @@ practice because it helps people match the @samp{#endif} to the
...
@@ -1961,7 +1967,7 @@ practice because it helps people match the @samp{#endif} to the
corresponding
@samp{#
if
}
.
Such
comments
should
always
be
used
,
except
in
corresponding
@samp{#
if
}
.
Such
comments
should
always
be
used
,
except
in
short
conditionals
that
are
not
nested
.
In
fact
,
you
can
put
anything
at
short
conditionals
that
are
not
nested
.
In
fact
,
you
can
put
anything
at
all
after
the
@samp{#
endif
}
and
it
will
be
ignored
by
the
GNU
C
preprocessor
,
all
after
the
@samp{#
endif
}
and
it
will
be
ignored
by
the
GNU
C
preprocessor
,
but
only
comments
are
acceptable
in
ANSI
Standard
C
.
but
only
comments
are
acceptable
in
ANSI
Standard
C
@
.
@var{
expression
}
is
a
C
expression
of
integer
type
,
subject
to
stringent
@var{
expression
}
is
a
C
expression
of
integer
type
,
subject
to
stringent
restrictions
.
It
may
contain
restrictions
.
It
may
contain
...
@@ -2444,8 +2450,8 @@ rather than a line of output containing just a @samp{#}. Supposedly
...
@@ -2444,8 +2450,8 @@ rather than a line of output containing just a @samp{#}. Supposedly
some
old
C
programs
contain
such
lines
.
some
old
C
programs
contain
such
lines
.
@findex
#
pragma
@findex
#
pragma
The
ANSI
standard
specifies
that
the
@samp
{
#
pragma
}
directive
has
an
The
ANSI
standard
specifies
that
the
effect
of
the
@samp
{
#
pragma
}
arbitrary
,
implementation
-
defined
effect
.
In
the
GNU
C
preprocessor
,
directive
is
implementation
-
defined
.
In
the
GNU
C
preprocessor
,
@samp
{
#
pragma
}
directives
are
not
used
,
except
for
@samp
{
#
pragma
once
}
@samp
{
#
pragma
}
directives
are
not
used
,
except
for
@samp
{
#
pragma
once
}
(
@pxref
{
Once
-
Only
}).
However
,
they
are
left
in
the
preprocessor
output
,
(
@pxref
{
Once
-
Only
}).
However
,
they
are
left
in
the
preprocessor
output
,
so
they
are
available
to
the
compilation
pass
.
so
they
are
available
to
the
compilation
pass
.
...
@@ -2493,7 +2499,7 @@ This indicates returning to a file (after having included another file).
...
@@ -2493,7 +2499,7 @@ This indicates returning to a file (after having included another file).
This
indicates
that
the
following
text
comes
from
a
system
header
file
,
This
indicates
that
the
following
text
comes
from
a
system
header
file
,
so
certain
warnings
should
be
suppressed
.
so
certain
warnings
should
be
suppressed
.
@item
4
@item
4
This
indicates
that
the
following
text
should
be
treated
as
C
.
This
indicates
that
the
following
text
should
be
treated
as
C
@
.
@c
maybe
cross
reference
NO_IMPLICIT_EXTERN_C
@c
maybe
cross
reference
NO_IMPLICIT_EXTERN_C
@end
table
@end
table
...
@@ -2538,7 +2544,7 @@ output before the expansion of the macro call.
...
@@ -2538,7 +2544,7 @@ output before the expansion of the macro call.
@item
-
traditional
@item
-
traditional
@findex
-
traditional
@findex
-
traditional
Try
to
imitate
the
behavior
of
old
-
fashioned
C
,
as
opposed
to
ANSI
C
.
Try
to
imitate
the
behavior
of
old
-
fashioned
C
,
as
opposed
to
ANSI
C
@
.
@itemize
@bullet
@itemize
@bullet
@item
@item
...
@@ -2566,17 +2572,17 @@ It considers @samp{1.0e+4} to be three tokens: @samp{1.0e}, @samp{+},
...
@@ -2566,17 +2572,17 @@ It considers @samp{1.0e+4} to be three tokens: @samp{1.0e}, @samp{+},
and
@samp
{
4
}.
and
@samp
{
4
}.
@item
@item
A
macro
is
not
suppressed
within
its
own
definition
,
in
traditional
C
.
A
macro
is
not
suppressed
within
its
own
definition
,
in
traditional
C
@
.
Thus
,
any
macro
that
is
used
recursively
inevitably
causes
an
error
.
Thus
,
any
macro
that
is
used
recursively
inevitably
causes
an
error
.
@item
@item
The
character
@samp
{
#
}
has
no
special
meaning
within
a
macro
definition
The
character
@samp
{
#
}
has
no
special
meaning
within
a
macro
definition
in
traditional
C
.
in
traditional
C
@
.
@item
@item
In
traditional
C
,
the
text
at
the
end
of
a
macro
expansion
can
run
In
traditional
C
,
the
text
at
the
end
of
a
macro
expansion
can
run
together
with
the
text
after
the
macro
call
,
to
produce
a
single
token
.
together
with
the
text
after
the
macro
call
,
to
produce
a
single
token
.
(
This
is
impossible
in
ANSI
C
.)
(
This
is
impossible
in
ANSI
C
@
.)
@item
@item
Traditionally
,
@samp
{
\
}
inside
a
macro
argument
suppresses
the
syntactic
Traditionally
,
@samp
{
\
}
inside
a
macro
argument
suppresses
the
syntactic
...
@@ -2629,7 +2635,7 @@ Requests both @samp{-Wtrigraphs} and @samp{-Wcomment} (but not
...
@@ -2629,7 +2635,7 @@ Requests both @samp{-Wtrigraphs} and @samp{-Wcomment} (but not
@item -Wtraditional
@item -Wtraditional
@findex -Wtraditional
@findex -Wtraditional
Warn about certain constructs that behave differently in traditional and
Warn about certain constructs that behave differently in traditional and
ANSI C.
ANSI C
@
.
@item -I @var{directory}
@item -I @var{directory}
@findex -I
@findex -I
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment