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
c97412e2
Commit
c97412e2
authored
Oct 11, 2001
by
Geert Bosch
Committed by
Geert Bosch
Oct 11, 2001
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* gnat-style.texi: New file describing coding guidelines for Ada.
From-SVN: r46198
parent
a185c302
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
631 additions
and
0 deletions
+631
-0
gcc/ada/ChangeLog
+4
-0
gcc/ada/gnat-style.texi
+627
-0
No files found.
gcc/ada/ChangeLog
View file @
c97412e2
2001-10-10 Geert Bosch <bosch@gnat.com>
* gnat-style.texi: New file describing coding guidelines for Ada.
2001-10-10 Ed Schonberg <schonber@gnat.com>
2001-10-10 Ed Schonberg <schonber@gnat.com>
* einfo.adb (Write_Entity_Flags): Elaboration_Entity_Required
* einfo.adb (Write_Entity_Flags): Elaboration_Entity_Required
...
...
gcc/ada/gnat-style.texi
0 → 100644
View file @
c97412e2
\
input
texinfo
@
c
-*-
texinfo
-*-
@
c
%**
start
of
header
@
c
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
@
c
o
@
c
GNAT
DOCUMENTATION
o
@
c
o
@
c
G
N
A
T
C
O
D
I
N
G
S
T
Y
L
E
o
@
c
o
@
c
$
Revision
:
1.1
$
@
c
o
@
c
Copyright
(
C
)
1992
-
2001
Ada
Core
Technologies
,
Inc
.
o
@
c
o
@
c
GNAT
is
free
software
;
you
can
redistribute
it
and
/
or
modify
it
under
o
@
c
terms
of
the
GNU
General
Public
License
as
published
by
the
Free
Soft
-
o
@
c
ware
Foundation
;
either
version
2
,
or
(
at
your
option
)
any
later
ver
-
o
@
c
sion
.
GNAT
is
distributed
in
the
hope
that
it
will
be
useful
,
but
WITH
-
o
@
c
OUT
ANY
WARRANTY
;
without
even
the
implied
warranty
of
MERCHANTABILITY
o
@
c
or
FITNESS
FOR
A
PARTICULAR
PURPOSE
.
See
the
GNU
General
Public
License
o
@
c
for
more
details
.
You
should
have
received
a
copy
of
the
GNU
General
o
@
c
Public
License
distributed
with
GNAT
;
see
file
COPYING
.
If
not
,
write
o
@
c
to
the
Free
Software
Foundation
,
59
Temple
Place
-
Suite
330
,
Boston
,
o
@
c
MA
02111
-
1307
,
USA
.
o
@
c
o
@
c
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
@
setfilename
gnat
-
style
.
info
@
settitle
GNAT
Coding
Style
@
c
%**
end
of
header
@
ifinfo
@
center
GNAT
Coding
Style
@
center
A
guide
for
GNAT
developers
Copyright
(
C
)
1992
-
2001
Ada
Core
Technologies
,
Inc
.
@
end
ifinfo
@
titlepage
@
sp
10
@
title
GNAT
Coding
Stye
@
subtitle
A
guide
for
GNAT
developers
@
subtitle
Document
revision
level
$
Revision
:
1.1
$
@
subtitle
Date
:
@
today
{}
@
author
Ada
Core
Technologies
,
Inc
.
@
end
titlepage
@
raisesections
@
node
Top
,
General
,
,
(
dir
)
@
comment
node
-
name
,
next
,
previous
,
up
@
menu
*
General
::
*
Lexical
Elements
::
*
Declarations
and
Types
::
*
Expressions
and
Names
::
*
Statements
::
*
Subprograms
::
*
Packages
::
*
Program
Structure
::
@
end
menu
@
c
-------------------------------------------------------------------------
@
node
General
,
Lexical
Elements
,
Top
,
Top
@
section
General
@
c
-------------------------------------------------------------------------
@
noindent
Most
of
GNAT
is
written
in
Ada
using
a
consistent
style
to
ensure
readability
of
the
code
.
This
document
has
been
written
to
help
maintain
this
consistent
style
,
while
having
a
large
group
of
developers
work
on
the
compiler
.
@
noindent
For
the
coding
style
in
the
C
parts
of
the
compiler
and
run
time
,
see
the
GNU
Coding
Guidelines
.
@
noindent
This
document
is
structured
after
the
Ada
Reference
manual
.
Those
familiar
with
that
document
should
be
able
to
quickly
lookup
style
rules
for
particular
constructs
.
@
c
-------------------------------------------------------------------------
@
node
Lexical
Elements
,
Declarations
and
Types
,
General
,
Top
@
section
Lexical
Elements
@
c
-------------------------------------------------------------------------
@
subsection
Character
Set
and
Separators
@
c
-------------------------------------------------------------------------
@
itemize
@
bullet
@
item
The
character
set
used
should
be
plain
7
-
bit
ASCII
.
The
only
separators
allowed
are
space
and
the
end
-
of
-
line
sequence
.
No
other
control
character
or
format
effector
(
such
as
HT
,
VT
,
FF
)
should
be
used
.
The
normal
end
-
of
-
line
sequence
is
used
,
which
may
be
LF
,
CR
/
LF
or
CR
,
depending
on
the
host
system
.
An
optional
SUB
(
16
#
1
A
#)
may
be
present
as
the
last
character
in
the
file
on
hosts
using
that
character
as
file
terminator
.
@
item
Files
that
are
checked
in
or
distributed
should
be
in
host
format
.
@
item
A
line
should
never
be
longer
than
79
characters
,
not
counting
the
line
separator
.
@
item
Lines
must
not
have
trailing
blanks
.
@
item
Indentation
is
3
characters
per
level
for
if
-
statements
,
loops
,
case
statements
.
For
exact
information
on
required
spacing
between
lexical
elements
,
see
file
@
file
{
style
.
adb
}.
@
end
itemize
@
subsection
Identifiers
@
c
-------------------------------------------------------------------------
@
itemize
@
bullet
@
item
Identifiers
will
start
with
an
upper
case
letter
,
and
each
letter
following
an
underscore
will
be
upper
case
.
Short
acronyms
may
be
all
upper
case
.
All
other
letters
are
lower
case
.
An
exception
is
for
identifiers
matching
a
foreign
language
.
In
particular
,
we
use
all
lower
case
where
appropriate
for
C
.
@
item
Use
underscores
to
separate
words
in
an
identifier
.
@
item
Try
to
limit
your
use
of
abbreviations
in
identifiers
.
It
is
ok
to
make
a
few
abbreviations
,
explain
what
they
mean
,
and
then
use
them
frequently
,
but
don
't use lots of obscure abbreviations.
An example is the @code{ALI} word which stands for Ada Library Information
and is by convention always written in upper-case when used in entity names.
@smallexample
procedure Find_ALI_Files;
@end smallexample
@item
Don'
t
use
the
variable
I
,
use
J
instead
,
I
is
too
easily
mixed
up
with
1
in
some
fonts
.
Similarly
don
't use the variable O, which is too easily
mixed up with zero.
@end itemize
@subsection Numeric Literals
@c -------------------------------------------------------------------------
@itemize @bullet
@item
Numeric literals should include underscores where helpful for
readability.
@smallexample
1_000_000
16#8000_000#
3.14159_26535_89793_23846
@end smallexample
@end itemize
@subsection Reserved Words
@c -------------------------------------------------------------------------
@itemize @bullet
@item
Reserved words use all lower case.
@smallexample
return else
@end smallexample
@item
The words "Access", "Delta" and "Digits" are capitalized when used
as attribute_designator.
@end itemize
@subsection Comments
@c -------------------------------------------------------------------------
@itemize @bullet
@item
Comment start with @code{-- } (ie @code{--} followed by two spaces).
The only exception to this rule (i.e. one space is tolerated) is when the
comment ends with @code{--}.
It also accepted to have only one space between @code{--} and the start
of the comment when the comment is at the end of a line,
after an Ada statement.
@item
Every sentence in a comment should start with an upper-case letter (including
the first letter of the comment).
@item
When declarations are commented with "hanging" comments, i.e. comments
after the declaration, there is no blank line before the comment, and
if it is absolutely necessary to have blank lines within the comments
these blank lines *do* have a -- (unlike the normal rule, which is to
use entirely blank lines for separating comment paragraphs).
The comment start at same level of indentation as code they are commenting.
@smallexample
z : integer;
-- Integer value for storing value of z
--
-- The previous line was a blank line
@end smallexample
@item
Comments that are dubious or incomplete or comment on possibly
wrong or incomplete code should be preceded or followed by ???
@item
Comments in a subprogram body must generally be surrounded by blank lines,
except after a "begin":
@smallexample
begin
-- Comment for the next statement
A := 5;
-- Comment for the B statement
B := 6;
@end smallexample
@item
In sequences of statements, comments at the end of the lines should be
aligned.
@smallexample
My_Identifier := 5; -- First comment
Other_Id := 6; -- Second comment
@end smallexample
@item
Short comments that fit on a single line are NOT ended with a period.
Comments taking more than a line are punctuated in the normal manner.
@item
Comments should focus on why instead of what.
Descriptions of what subprograms do go with the specification.
@item
Comments describing a subprogram spec should specifically mention the
formal argument names. General rule: write a comment that does not
depend on the names of things. The names are supplementary, not
sufficient, as comments.
@item
Do NOT put two spaces after periods in comments.
@end itemize
@c -------------------------------------------------------------------------
@node Declarations and Types, Expressions and Names, Lexical Elements,Top
@section Declarations and Types
@c -------------------------------------------------------------------------
@itemize @bullet
@item
In entity declarations, colons must be surrounded by spaces. Colons
should be aligned.
@smallexample
Entity1 : Integer;
My_Entity : Integer;
@end smallexample
@item
Declarations should be grouped in a logical order.
Related groups of declarations may be preceded by a header comment.
@item
All local subprograms in a subprogram or package body should be declared
before the first local subprogram body.
@item
Do not declare discriminated record types where the discriminant is used
for constraining an unconstrained array type. (Discriminated
records for a variant part are allowed.)
@item
Don'
t
declare
local
entities
that
hide
global
entities
.
@
item
Don
't declare multiple variables in one declaration that spans lines.
Start a new declaration on each line, instead
@item
The defining_identifiers of global declarations serve as comments of a sort.
So don'
t
choose
terse
names
,
but
look
for
names
that
give
useful
information
instead
.
@
item
Local
names
can
be
shorter
,
because
they
are
used
only
within
one
context
,
where
comments
explain
their
purpose
.
@
end
itemize
@
c
-------------------------------------------------------------------------
@
node
Expressions
and
Names
,
Statements
,
Declarations
and
Types
,
Top
@
section
Expressions
and
Names
@
c
-------------------------------------------------------------------------
@
itemize
@
bullet
@
item
Every
operator
must
be
surrounded
by
spaces
,
except
for
the
exponentiation
operator
.
@
smallexample
E
:=
A
*
B
**
2
+
3
*
(
C
-
D
);
@
end
smallexample
@
item
When
folding
a
long
line
,
fold
before
an
operator
,
not
after
.
@
item
Use
parentheses
where
they
make
the
intended
order
of
evaluation
clearer
:
@
smallexample
(
A
/
B
)
*
C
@
end
smallexample
@
end
itemize
@
c
-------------------------------------------------------------------------
@
node
Statements
,
Subprograms
,
Expressions
and
Names
,
Top
@
section
Statements
@
c
-------------------------------------------------------------------------
@
subsection
Simple
and
Compound
Statements
@
c
-------------------------------------------------------------------------
@
itemize
@
bullet
@
item
Use
only
one
statement
or
label
per
line
.
@
item
A
longer
sequence_of_statements
may
be
divided
in
logical
groups
or
separated
from
surrounding
code
using
a
blank
line
.
@
end
itemize
@
subsection
If
Statements
@
c
-------------------------------------------------------------------------
@
itemize
@
bullet
@
item
When
the
"if"
,
"elsif"
or
"else"
keywords
fit
on
the
same
line
with
the
condition
and
the
"then"
keyword
,
then
the
statement
is
formatted
as
follows
:
@
smallexample
if
<
condition
>
then
...
elsif
<
condition
>
then
...
else
...
end
if
;
@
end
smallexample
@
noindent
When
the
above
layout
is
not
possible
,
"then"
should
be
aligned
with
"if"
,
and
conditions
should
preferably
be
split
before
an
"and"
or
"or"
keyword
a
follows
:
@
smallexample
if
<
long_condition_that_has_to_be_split
>
and
then
<
continued_on_the_next_line
>
then
...
end
if
;
@
end
smallexample
@
noindent
The
"elsif"
,
"else"
and
"end if"
always
line
up
with
the
"if"
keyword
.
The
prefered
location
for
splitting
the
line
is
before
"and"
or
"or"
.
The
continuation
of
a
condition
is
indented
with
two
spaces
or
as
many
as
needed
to
make
nesting
clear
.
As
exception
,
if
conditions
are
closely
related
either
of
the
following
is
allowed
:
@
smallexample
if
x
=
lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
or
else
x
=
asldkjhalkdsjfhhfd
or
else
x
=
asdfadsfadsf
then
if
x
=
lakdsjfhlkashfdlkflkdsalkhfsalkdhflkjdsahf
or
else
x
=
asldkjhalkdsjfhhfd
or
else
x
=
asdfadsfadsf
then
@
end
smallexample
@
item
Conditions
should
use
short
-
circuit
forms
(
"and then"
,
"or else"
).
@
item
Complex
conditions
in
if
-
statements
are
indented
two
characters
:
@
smallexample
if
this_complex_condition
and
then
that_other_one
and
then
one_last_one
then
...
@
end
smallexample
@
item
Every
"if"
block
is
preceded
and
followed
by
a
blank
line
,
except
where
it
begins
or
ends
a
sequence_of_statements
.
@
smallexample
A
:=
5
;
if
A
=
5
then
null
;
end
if
;
A
:=
6
;
@
end
smallexample
@
end
itemize
@
subsection
Case
statements
@
itemize
@
bullet
@
item
Layout
is
as
below
.
For
long
case
statements
,
the
extra
indentation
can
be
saved
by
aligning
the
when
clauses
with
the
opening
case
.
@
smallexample
case
<
expression
>
is
when
<
condition
>
=>
...
when
<
condition
>
=>
...
end
case
;
@
end
smallexample
@
end
itemize
@
subsection
Loop
statements
@
itemize
@
bullet
@
noindent
When
possible
,
have
"for"
or
"while"
on
one
line
with
the
condition
and
the
"loop"
keyword
.
@
smallexample
for
I
in
S
'Range loop
...
end loop;
@end smallexample
@noindent
If the condition is too long, split the condition (see if_statement)
and align "loop" with the "for" or "while" keyword.
@smallexample
while <long_condition_that_has_to_be_split>
and then <continued_on_the_next_line>
loop
...
end loop;
@end smallexample
@noindent
If the loop_statement has an identifier, it is layout as follows:
@smallexample
Outer : while not <condition> loop
...
end Outer;
@end smallexample
@end itemize
@subsection Block Statements
@itemize @bullet
@item
The (optional) "declare", "begin" and "end" statements are aligned,
except when the block_statement is named:
@smallexample
Some_Block : declare
...
begin
...
end Some_Block;
@end smallexample
@end itemize
@c -------------------------------------------------------------------------
@node Subprograms, Packages, Statements, Top
@section Subprograms
@c -------------------------------------------------------------------------
@subsection Subprogram Declarations
@c -------------------------------------------------------------------------
@itemize @bullet
@item
Do not write the "in" for parameters, especially in functions:
@smallexample
function Length (S : String) return Integer;
@end smallexample
@item
When the declaration line for a procedure or a function is too long, fold it.
@smallexample
function Head
(Source : String;
Count : Natural;
Pad : Character := Space)
return String;
@end smallexample
@item
The parameter list for a subprogram is preceded by a space:
@smallexample
procedure Func (A : Integer);
@end smallexample
@end itemize
@subsection Subprogram Bodies
@c -------------------------------------------------------------------------
@itemize @bullet
@item
The functions and procedures should always be sorted alphabetically in
a compilation unit.
@item
All subprograms have a header giving the function name, with the following
format:
@smallexample
-----------------
-- My_Function --
-----------------
procedure My_Function is
begin
@end smallexample
Note that the name in the header is preceded by a single space,
not two spaces as for other comments.
@item
Every subprogram body must have a preceding subprogram_declaration.
@item
If declarations of a subprogram contain at least one nested subprogram
body, then just before the begin is a line:
@smallexample
-- Start of processing for bla bla
begin
@end smallexample
@end itemize
@c -------------------------------------------------------------------------
@node Packages, Program Structure, Subprograms, Top
@section Packages and Visibility Rules
@c -------------------------------------------------------------------------
@itemize @bullet
@item
All program units and subprograms have their name at the end:
@smallexample
package P is
...
end P;
@end smallexample
@item
We will use the style of use-ing with-ed packages, with the context
clauses looking like:
@smallexample
with A; use A;
with B; use B;
@end smallexample
@item
Names declared in the visible part of packages should be
unique, to prevent name clashes when the packages are "use"d.
@smallexample
package Entity is
type Entity_Kind is ...;
...
end Entity;
@end smallexample
@item
After the file header comment, the context clause and unit specification
should be the first thing in a program_unit.
@end itemize
@c -------------------------------------------------------------------------
@node Program Structure,, Packages, Top
@section Program Structure and Compilation Issues
@c -------------------------------------------------------------------------
@itemize @bullet
@item
Every GNAT source file must be compiled with the "-gnatg" switch to check
the coding style (Note that you should look at @file{style.adb} to
see the lexical rules enforced by -gnatg).
@item
Each source file should contain only one compilation unit.
@item
Filenames should be 8 characters or less followed by the ".adb" extension
for a body or ".ads" for a spec.
@item
Unit names should be distinct when krunched to 8 characters
(see @file{krunch.ads}) and the filenames should match the unit name,
except that they are all lower case.
@end itemize
@bye
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