This document presents C and C++ coding conventions for the GridLab project. It covers file organization and naming, indentation, comments, declarations, statements, whitespace, naming conventions, and programming practices. All partners working on the project must follow these guidelines, which are subject to review by the Quality Assurance manager.
Changing scenario of packaging in pharmaceutical industriesakash mitra
Ā
Packaging is the science, art and technology of enclosing or protecting products for distribution, storage, sale, and use.
Packaging also refers to the process of design, evaluation, and production of packages.
Pharmaceutical packaging can be defined as the economical means of providing presentation, protection, identification , information, convenience ,compliance , integrity and stability of the product .
Menerapkan Online Learning dal am PelatihanUwes Chaeruman
Ā
Online learning dap at diterapkan dal am konteks pelatihan. Penerapanya agar sedikit berbeda dengan pelatihan konvensional. Apakah prinsip penerapan pembelajaran online dalam pelatihan tersebut? Slide ini menyajikannya dalam bentuk tanya dan jawab.
45 Days C++ Programming Language Training in Ambalajatin batra
Ā
Are you looking for C++Programming Training In Ambala?
Now you search ends here... Batra Computer Centre provides you best C++ Programming Language Training in Ambala Cantt. We also proides you training in C, HTML, PHP, Web Designing, Web Development, SEO, SMO also.
This is a course about embedded systems programming. Embedded systems are everywhere today, including just to name a few the thermostats that control a building's temperature, the power-steering controller in modern automobiles, and the control systems in charge of jet engines. The prerequisites for reading this ebook are: knowledge about computer and processors architecture, Ada programming language.
Changing scenario of packaging in pharmaceutical industriesakash mitra
Ā
Packaging is the science, art and technology of enclosing or protecting products for distribution, storage, sale, and use.
Packaging also refers to the process of design, evaluation, and production of packages.
Pharmaceutical packaging can be defined as the economical means of providing presentation, protection, identification , information, convenience ,compliance , integrity and stability of the product .
Menerapkan Online Learning dal am PelatihanUwes Chaeruman
Ā
Online learning dap at diterapkan dal am konteks pelatihan. Penerapanya agar sedikit berbeda dengan pelatihan konvensional. Apakah prinsip penerapan pembelajaran online dalam pelatihan tersebut? Slide ini menyajikannya dalam bentuk tanya dan jawab.
45 Days C++ Programming Language Training in Ambalajatin batra
Ā
Are you looking for C++Programming Training In Ambala?
Now you search ends here... Batra Computer Centre provides you best C++ Programming Language Training in Ambala Cantt. We also proides you training in C, HTML, PHP, Web Designing, Web Development, SEO, SMO also.
This is a course about embedded systems programming. Embedded systems are everywhere today, including just to name a few the thermostats that control a building's temperature, the power-steering controller in modern automobiles, and the control systems in charge of jet engines. The prerequisites for reading this ebook are: knowledge about computer and processors architecture, Ada programming language.
Event Management System Vb Net Project Report.pdfKamal Acharya
Ā
In present era, the scopes of information technology growing with a very fast .We do not see any are untouched from this industry. The scope of information technology has become wider includes: Business and industry. Household Business, Communication, Education, Entertainment, Science, Medicine, Engineering, Distance Learning, Weather Forecasting. Carrier Searching and so on.
My project named āEvent Management Systemā is software that store and maintained all events coordinated in college. It also helpful to print related reports. My project will help to record the events coordinated by faculties with their Name, Event subject, date & details in an efficient & effective ways.
In my system we have to make a system by which a user can record all events coordinated by a particular faculty. In our proposed system some more featured are added which differs it from the existing system such as security.
Immunizing Image Classifiers Against Localized Adversary Attacksgerogepatton
Ā
This paper addresses the vulnerability of deep learning models, particularly convolutional neural networks
(CNN)s, to adversarial attacks and presents a proactive training technique designed to counter them. We
introduce a novel volumization algorithm, which transforms 2D images into 3D volumetric representations.
When combined with 3D convolution and deep curriculum learning optimization (CLO), itsignificantly improves
the immunity of models against localized universal attacks by up to 40%. We evaluate our proposed approach
using contemporary CNN architectures and the modified Canadian Institute for Advanced Research (CIFAR-10
and CIFAR-100) and ImageNet Large Scale Visual Recognition Challenge (ILSVRC12) datasets, showcasing
accuracy improvements over previous techniques. The results indicate that the combination of the volumetric
input and curriculum learning holds significant promise for mitigating adversarial attacks without necessitating
adversary training.
Quality defects in TMT Bars, Possible causes and Potential Solutions.PrashantGoswami42
Ā
Maintaining high-quality standards in the production of TMT bars is crucial for ensuring structural integrity in construction. Addressing common defects through careful monitoring, standardized processes, and advanced technology can significantly improve the quality of TMT bars. Continuous training and adherence to quality control measures will also play a pivotal role in minimizing these defects.
Democratizing Fuzzing at Scale by Abhishek Aryaabh.arya
Ā
Presented at NUS: Fuzzing and Software Security Summer School 2024
This keynote talks about the democratization of fuzzing at scale, highlighting the collaboration between open source communities, academia, and industry to advance the field of fuzzing. It delves into the history of fuzzing, the development of scalable fuzzing platforms, and the empowerment of community-driven research. The talk will further discuss recent advancements leveraging AI/ML and offer insights into the future evolution of the fuzzing landscape.
Forklift Classes Overview by Intella PartsIntella Parts
Ā
Discover the different forklift classes and their specific applications. Learn how to choose the right forklift for your needs to ensure safety, efficiency, and compliance in your operations.
For more technical information, visit our website https://intellaparts.com
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSEDuvanRamosGarzon1
Ā
AIRCRAFT GENERAL
The Single Aisle is the most advanced family aircraft in service today, with ļ¬y-by-wire ļ¬ight controls.
The A318, A319, A320 and A321 are twin-engine subsonic medium range aircraft.
The family offers a choice of engines
Sachpazis:Terzaghi Bearing Capacity Estimation in simple terms with Calculati...Dr.Costas Sachpazis
Ā
Terzaghi's soil bearing capacity theory, developed by Karl Terzaghi, is a fundamental principle in geotechnical engineering used to determine the bearing capacity of shallow foundations. This theory provides a method to calculate the ultimate bearing capacity of soil, which is the maximum load per unit area that the soil can support without undergoing shear failure. The Calculation HTML Code included.
Courier management system project report.pdfKamal Acharya
Ā
It is now-a-days very important for the people to send or receive articles like imported furniture, electronic items, gifts, business goods and the like. People depend vastly on different transport systems which mostly use the manual way of receiving and delivering the articles. There is no way to track the articles till they are received and there is no way to let the customer know what happened in transit, once he booked some articles. In such a situation, we need a system which completely computerizes the cargo activities including time to time tracking of the articles sent. This need is fulfilled by Courier Management System software which is online software for the cargo management people that enables them to receive the goods from a source and send them to a required destination and track their status from time to time.
Overview of the fundamental roles in Hydropower generation and the components involved in wider Electrical Engineering.
This paper presents the design and construction of hydroelectric dams from the hydrologistās survey of the valley before construction, all aspects and involved disciplines, fluid dynamics, structural engineering, generation and mains frequency regulation to the very transmission of power through the network in the United Kingdom.
Author: Robbie Edward Sayers
Collaborators and co editors: Charlie Sims and Connor Healey.
(C) 2024 Robbie E. Sayers
About
Indigenized remote control interface card suitable for MAFI system CCR equipment. Compatible for IDM8000 CCR. Backplane mounted serial and TCP/Ethernet communication module for CCR remote access. IDM 8000 CCR remote control on serial and TCP protocol.
ā¢ Remote control: Parallel or serial interface.
ā¢ Compatible with MAFI CCR system.
ā¢ Compatible with IDM8000 CCR.
ā¢ Compatible with Backplane mount serial communication.
ā¢ Compatible with commercial and Defence aviation CCR system.
ā¢ Remote control system for accessing CCR and allied system over serial or TCP.
ā¢ Indigenized local Support/presence in India.
ā¢ Easy in configuration using DIP switches.
Technical Specifications
Indigenized remote control interface card suitable for MAFI system CCR equipment. Compatible for IDM8000 CCR. Backplane mounted serial and TCP/Ethernet communication module for CCR remote access. IDM 8000 CCR remote control on serial and TCP protocol.
Key Features
Indigenized remote control interface card suitable for MAFI system CCR equipment. Compatible for IDM8000 CCR. Backplane mounted serial and TCP/Ethernet communication module for CCR remote access. IDM 8000 CCR remote control on serial and TCP protocol.
ā¢ Remote control: Parallel or serial interface
ā¢ Compatible with MAFI CCR system
ā¢ Copatiable with IDM8000 CCR
ā¢ Compatible with Backplane mount serial communication.
ā¢ Compatible with commercial and Defence aviation CCR system.
ā¢ Remote control system for accessing CCR and allied system over serial or TCP.
ā¢ Indigenized local Support/presence in India.
Application
ā¢ Remote control: Parallel or serial interface.
ā¢ Compatible with MAFI CCR system.
ā¢ Compatible with IDM8000 CCR.
ā¢ Compatible with Backplane mount serial communication.
ā¢ Compatible with commercial and Defence aviation CCR system.
ā¢ Remote control system for accessing CCR and allied system over serial or TCP.
ā¢ Indigenized local Support/presence in India.
ā¢ Easy in configuration using DIP switches.
1. C/C++ Coding Guidlines
Author(s): Tom Goodale
Document Filename: C/C++ Coding Guidlines
Work package: Technical Board
Partner(s): ALL
Lead Partner: AEI
Conļ¬g ID:
Document classiļ¬cation: Internal, Informational
Abstract: This Documents presents the C and C++ coding conventions as used by the
GridLab project. It is accompanied by similar documents for Java and Perl, and
by guidlines for Makeļ¬les, conļ¬gure scripts and LATEX documents. They should
be followed by all partners and are subject for reviews by the Quality Assurance
manager of the project.
2002/05/02 ā 22:26:22
3. C/C++ Coding Guidlines
1 C and C++
These coding conventions are adapted with permission from the Cactus Coding conventions. See
http://www.cactuscode.org/. These have been formatted in the same way as the Java coding
guidelines for consistency and some of those conventions adopted where there was no conļ¬ict.
1.1 File Organization
A ļ¬le consists of sections that should be separated by blank lines and an optional comment
identifying each section.
1.2 File Names
File names should be all lowercase, with the extension .h for include ļ¬les, .c for C source ļ¬les,
and .cpp for C++ source ļ¬les. The ļ¬le names should reļ¬ect the functionality deļ¬ned/implemented
in that ļ¬le. Files with logical connection (e.g. pairs of header and source ļ¬les) should reļ¬ect that
connection in their names wherever possible. Files belonging to the same moduleshould reļ¬ect
that dependency by a short uniq preļ¬x to the ļ¬lename, followed by an underscore. Followin
example illustrate these convention:
GNUmakefile io_base.cpp
server.c io_base.h
server_ioplug.h io_file.h
server_ioplug.c io_file.cpp
io_cwrapper.h io_stream.h
io_cwrapper.c io_stream.cpp
1.3 Source Files
C and C++ source ļ¬les have the following ordering:
ā¢ Beginning comments (see āBeginning Commentsā on 3)
ā¢ cvs version information
ā¢ #include statements
ā¢ #deļ¬nes.
ā¢ local data type deļ¬nitions.
ā¢ local (static) function prototypes.
ā¢ local (static) data.
ā¢ externally visible functions.
ā¢ local (static) functions.
2002/05/02 ā 22:26:22
Internal, Informational 2/17
4. C/C++ Coding Guidlines
Beginning Comments All source ļ¬les should begin with a comment that describes the ļ¬le
and its contents along with the date of creation, CVS version information, and a copyright
statement.
/** @file <filename>
* Brief description of contents of file.
*
* Long description
*
* @date <date of creation of file>
*
* @version <CVS $ Header $ field>
* Copyright notice.
*/
Note: This is a documentation comment ā see section 1.6.2 for details.
CVS Version Information After the documentation header, there should be a single line
static const char *rcsid = ā$Header$ā;
containing the CVS version information as a static. This can be subsequently extracted from
the object ļ¬le if there is doubt as to the version of the source code which was compiled.
1.4 Header Files
All header ļ¬les should begin with a comment that describes the ļ¬le and its contents along with
the date of creation, CVS version information, and a copyright statement.
/** @file <filename>
* Brief description of contents of file.
*
* Long description
*
* @date <date of creation of file>
*
* @version <CVS $ Header $ field>
* Copyright notice.
*/
Note: This is a documentation comment ā see section 1.6.2 for details.
To protect against multiple inclusion of headers, the contents of a header ļ¬le should be protected
by a #ifndef ... #endif pair.
#ifndef _NAMEOFHEADERFILEINCAPITALS_H_
#define _NAMEOFHEADERFILEINCAPITALS_H_ 1
...body of header file...
2002/05/02 ā 22:26:22
Internal, Informational 3/17
5. C/C++ Coding Guidlines
#endif /* _NAMEOFHEADERFILEINCAPITALS_H_ */
Function prototypes in C header ļ¬les should be protected against C++ linkage by
#ifdef __cplusplus
extern "C"
{
#endif
...prototypes...
#ifdef __cplusplus
}
#endif
As a general rule header ļ¬les should not include system header ļ¬les, but should rather document
which system header ļ¬les they require.
1.5 Indentation
Two spaces should be used as the unit of indentation. Tabs should not be used as inconsistent
use of tabs and spaces leads to diļ¬culties when using ādiļ¬ā or other tools to compare ļ¬les.
1.5.1 Line Length
Avoid lines longer than 80 characters, since theyāre not handled well by many terminals and
tools.
Note:
Examples for use in documentation should have a shorter line length-generally no more than 70
characters.
1.5.2 Wrapping Lines
When an expression will not ļ¬t on a single line, break it according to these general principles:
ā¢ Break after a comma.
ā¢ Break before an operator.
ā¢ Prefer higher-level breaks to lower-level breaks.
ā¢ Align the new line with the beginning of the expression at the same level on the previous
line.
ā¢ If the above rules lead to confusing code or to code thatās squished up against the right
margin, just indent 8 spaces instead.
Here are some examples of breaking function calls:
2002/05/02 ā 22:26:22
Internal, Informational 4/17
6. C/C++ Coding Guidlines
Function(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = Function(longExpression1,
Function2(longExpression2,
longExpression3));
Following are two examples of breaking an arithmetic expression. The ļ¬rst is preferred, since
the break occurs outside the parenthesised expression, which is at a higher level.
LongName1 = LongName2 * (LongName3 + LongName4 - LongName5)
+ 4 * longname6; /* PREFER */
LongName1 = LongName2 * (LongName3 + LongName4
- LongName5) + 4 * Longname6; /* AVOID */
Following are two examples of indenting function declarations. The ļ¬rst is the conventional
case. The second would shift the second and third lines to the far right if it used conventional
indentation, so instead it indents only 8 spaces.
/* CONVENTIONAL INDENTATION */
Function(int AnArg, double AnotherArg, char *YetAnotherArg,
int *AndStillAnother)
{
...
}
/*INDENT 8 SPACES TO AVOID VERY DEEP INDENTS */
static ReallyLongFunctionName(int AnArg,
double anotherArg, char *YetAnotherArg,
int *AndStillAnother)
{
...
}
/* OR, PUT EACH ARG ON OWN LINE */
static ReallyLongFunctionName(int AnArg,
double anotherArg,
char *YetAnotherArg,
int *AndStillAnother)
{
...
}
Here are three acceptable ways to format ternary expressions:
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
2002/05/02 ā 22:26:22
Internal, Informational 5/17
7. C/C++ Coding Guidlines
alpha = (aLongBooleanExpression)
? beta
: gamma;
1.6 Comments
Programs can have two kinds of comments: implementation comments and documentation com-
ments. Implementation comments are those found in C, which are delimited by /*...*/. Docu-
mentation comments are delimited by /**...*/. Doc comments can be extracted to HTML ļ¬les
using the doxygen tool.
Implementation comments are mean for commenting out code or for comments about the par-
ticular implementation. Doc comments are meant to describe the speciļ¬cation of the code, from
an implementation-free perspective, to be read by developers who might not necessarily have
the source code at hand.
Comments should be used to give overviews of code and provide additional information that
is not readily available in the code itself. Comments should contain only information that
is relevant to reading and understanding the program. For example, information about how
a corresponding package is built or in what directory it resides should not be included as a
comment.
Discussion of nontrivial or nonobvious design decisions is appropriate, but avoid duplicating
information that is present in (and clear from) the code. It is too easy for redundant comments
to get out of date. In general, avoid any comments that are likely to get out of date as the code
evolves.
Note:
The frequency of comments sometimes reļ¬ects poor quality of code. When you feel compelled
to add a comment, consider rewriting the code to make it clearer.
Comments should not be enclosed in large boxes drawn with asterisks or other characters.
Comments should never include special characters such as form-feed and backspace.
1.6.1 Implementation Comment Formats
Programs can have four styles of implementation comments: block, single-line, trailing, and
end-of-line.
Block Comments Block comments are used to provide descriptions of ļ¬les, methods, data
structures and algorithms. Block comments may be used at the beginning of each ļ¬le and before
each method. They can also be used in other places, such as within functions. Block comments
inside a function should be indented to the same level as the code they describe.
A block comment should be preceded by a blank line to set it apart from the rest of the code.
/*
* Here is a block comment.
*/
See also āDocumentation Commentsā on page 7.
2002/05/02 ā 22:26:22
Internal, Informational 6/17
8. C/C++ Coding Guidlines
Single-Line Comments Short comments can appear on a single line indented to the level of
the code that follows. If a comment canāt be written in a single line, it should follow the block
comment format (see section 1.6.1). A single-line comment should be preceded by a blank line.
Hereās an example of a single-line comment in C code (also see āDocumentation Commentsā on
page 7):
if (condition)
{
/* Handle the condition. */
...
}
Trailing Comments Very short comments can appear on the same line as the code they
describe, but should be shifted far enough to separate them from the statements. If more than
one short comment appears in a chunk of code, they should all be indented to the same tab
setting.
Hereās an example of a trailing comment in C code:
if (a == 2)
{
a = TRUE; /* special case */
}
else
{
a = isPrime(a); /* works only for odd a */
}
1.6.2 Documentation Comments
For further details, see āThe Doxygen Manualā which includes information on the doc comment
tags (@return, @param, @see):
http://www.doxygen.org
Doxygen comments describe C functions, structures, enums, unions, etc. Each doc comment is
set inside the comment delimiters /**...*/, with one comment per class, interface, or member.
This comment should appear just before the declaration:
/**
* The Example function provides ...
*/
static Example(void)
{ ...
The ļ¬rst line of doc comment (/**) is not indented relative to the surrounding block; subsequent
doc comment lines each have 1 space of indentation (to vertically align the asterisks).
If you need to give information that isnāt appropriate for documentation, use an implementation
block comment (see section 1.6.1) or single-line (see section 1.6.1) comment immediately before
the declaration. For example, details about the implementation of a function should go in in
such an implementation block comment following the doc comment for the function, not in the
function doc comment.
2002/05/02 ā 22:26:22
Internal, Informational 7/17
9. C/C++ Coding Guidlines
1.7 Declarations
1.7.1 Number Per Line
One declaration per line is recommended since it encourages commenting. In other words,
int level; /* indentation level */
int size; /* size of table */
is preferred over
int level, size;
Do not put diļ¬erent types on the same line. Example:
int foo, fooarray[SIZE]; /* WRONG! */
Note:
The examples above use one space between the type and the identiļ¬er. Another acceptable
alternative is to line up a group of declarations (with spaces, not tabs), e.g.:
int level; /* indentation level */
int size; /* size of table */
Object currentEntry; /* currently selected table entry */
1.7.2 Initialisation
Initialisation of a variable should be done in a seperate statement to its declaration, but as soon
after the declaration as possible. The only reason not to initialise a variable straght after it is
declared is if the initial value depends on some computation occurring ļ¬rst.
1.7.3 Placement
Put declarations only at the beginning of blocks. (A block is any code surrounded by curly
braces ā{ā and ā}ā.) Donāt wait to declare variables until their ļ¬rst use; it can confuse the
unwary programmer and hamper code portability within the scope.
void MyFunction(...)
{
int int1;
int1 = 0; /* beginning of block */
if (condition)
{
int int2;
int2 = 0; /* beginning of "if" block */
...
}
}
2002/05/02 ā 22:26:22
Internal, Informational 8/17
10. C/C++ Coding Guidlines
The one exception to the rule is indices of for loops in C++, which can be declared in the for
statement:
for (int i = 0; i < MaxLoops; i++)
{
...
}
Avoid local declarations that hide declarations at higher levels. For example, do not declare the
same variable name in an inner block:
int count;
...
int MyFunction(...)
{
if (condition)
{
int count; /* AVOID! */
...
}
...
}
1.7.4 Function Declarations
When coding C functions the following formatting rules should be followed:
ā¢ All functions should be preceded by a documentation comment describing the function,
its arguments and return code(s).
ā¢ Open brace ā{ā appears at the beginning of the line following the declaration statement
ā¢ Closing brace ā}ā starts a line by itself.
/** The sample function.
* This function calculates the sample thingy.
* Some more description.
*
* @param i The first argument.
* @param j the second argument.
*
* @return The sample value.
*/
int Sample(int i, int j)
{
return i+j;
}
2002/05/02 ā 22:26:22
Internal, Informational 9/17
11. C/C++ Coding Guidlines
1.8 Statements
1.8.1 Simple Statements
Each line should contain at most one statement. Example:
argv++; /* Correct */
argc--; /* Correct */
argv++; argc--; /* AVOID! */
1.8.2 Compound Statements
Compound statements are statements that contain lists of statements enclosed in braces ā{
statements }ā. See the following sections for examples.
ā¢ The enclosed statements should be indented one more level than the compound statement.
ā¢ The opening brace should be on a line by itself following the line that begins the compound
statement, indented to the same level as that line; the closing brace should begin a line
and be indented to the beginning of the compound statement.
ā¢ Braces are used around all statements, even single statements, when they are part of a
control structure, such as a if-else or for statement. This makes it easier to add statements
without accidentally introducing bugs due to forgetting to add braces.
1.8.3 return Statements
A return statement with a value should not use parentheses unless they make the return value
more obvious in some way. Example:
return;
return MyDisk_size();
return (size ? size : defaultSize);
1.8.4 if, if-else, if else-if else Statements
The if-else class of statements should have the following form:
if (condition)
{
statements;
}
if (condition)
{
statements;
}
2002/05/02 ā 22:26:22
Internal, Informational 10/17
12. C/C++ Coding Guidlines
else
{
statements;
}
if (condition)
{
statements;
}
else if (condition)
{
statements;
}
else
{
statements;
}
Note:
if statements always use braces {}. Avoid the following error-prone form:
if (condition) /*AVOID! THIS OMITS THE BRACES {}! */
statement;
1.8.5 for Statements
A for statement should have the following form:
for (initialization; condition; update)
{
statements;
}
An empty for statement (one in which all the work is done in the initialization, condition, and
update clauses) should have the following form:
for (initialization; condition; update);
When using the comma operator in the initialization or update clause of a for statement, avoid
the complexity of using more than three variables. If needed, use separate statements before the
for loop (for the initialization clause) or at the end of the loop (for the update clause).
1.8.6 while Statements
A while statement should have the following form:
while (condition)
{
statements;
}
2002/05/02 ā 22:26:22
Internal, Informational 11/17
13. C/C++ Coding Guidlines
An empty while statement should have the following form:
while (condition);
1.8.7 do-while Statements
A do-while statement should have the following form:
do
{
statements;
} while (condition);
1.8.8 switch Statements
A switch statement should have the following form:
switch (condition)
{
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
Every time a case falls through (doesnāt include a break statement), add a comment where the
break statement would normally be. This is shown in the preceding code example with the /*
falls through */ comment.
Every switch statement should include a default case. The break in the default case is redundant,
but it prevents a fall-through error if later the default is changed to a speciļ¬c case and a new
default is introduced.
1.9 White Space
1.9.1 Blank Lines
Blank lines improve readability by setting oļ¬ sections of code that are logically related.
Two blank lines should always be used in the following circumstances:
ā¢ Between sections of a source ļ¬le
One blank line should always be used in the following circumstances:
ā¢ Between functions
2002/05/02 ā 22:26:22
Internal, Informational 12/17
14. C/C++ Coding Guidlines
ā¢ Between the local variable declarations in a block and its ļ¬rst statement
ā¢ Before a block (see section 1.6.1) or single-line (see section 1.6.1) comment
ā¢ Between logical sections inside a function to improve readability
1.9.2 Blank Spaces
Blank spaces should be used in the following circumstances:
ā¢ A blank space should appear after commas in argument lists.
ā¢ All binary operators should be separated from their operands by spaces. Blank spaces
should never separate unary operators such as unary minus, increment (ā++ā), and decre-
ment (āāā) from their operands. Example:
a += c + d;
a = (a + b) / (c * d);
while (d++ = s++)
{
n++;
}
ā¢ The expressions in a for statement should be separated by blank spaces. Example:
for (expr1; expr2; expr3)
ā¢ Casts should be followed by a blank space. Examples:
MyFunction1((char) aNum, (double) x);
MyFunction2((int) (cp + 5), ((int) (i + 3) + 1);
1.10 Naming Conventions
Naming conventions make programs more understandable by making them easier to read.
2002/05/02 ā 22:26:22
Internal, Informational 13/17
15. C/C++ Coding Guidlines
Externally visible functions should have a short preļ¬x uniquely iden-
tifying the module, followed by an under-
score, followed by the rest of the identi-
ļ¬er which should consist of words, each of
which begins with a capital letter, with no
underscores. E.g. GAT FindResource.
Static functions should follow the same convention as ex-
ternally visible functions, but need not
have the preļ¬x.
Variable names should be short yet meaningful. The
choice of a variable name should be
mnemonic- that is, designed to indicate
to the casual observer the intent of its
use. One-character variable names should
be avoided except for temporary āthrow-
awayā variables. Common names for tem-
porary variables are i, j, k, m, and n for
integers; c, d, and e for characters.
#deļ¬nes should be all uppercase.
typedefs and structures should have a short preļ¬x, followed by un-
derscore, followed by the rest of the iden-
tiļ¬er which should consist of words, each
of which begins with a capital letter, with
no underscores. E.g. GAT PropList.
1.11 Programming Practices
1.11.1 Adherence to Standards
All code should adhere to the ISO C or C++ standards. The presence or absence of library
functions not speciļ¬ed by the Posix standard on a particular platform should be detected by
use of Autoconf and appropriate logic emplaced to either work around the absence or provide a
good error message.
1.11.2 Use typedef in preference to #deļ¬nes
New types should be introduced via typedefs rather than by #deļ¬nes ā these types are then
visible in debuggers and the compiler can do stronger type-checking.
1.11.3 Use of const qualiļ¬er
Where possible pointers should be passed using the const qualiļ¬er. This is especially important
for strings.
1.11.4 Global and Static variables
Donāt make any variable global or static without good reason. Access to module level statics in
other ļ¬les can often be granted via a function call rather than by making the variable global.
2002/05/02 ā 22:26:22
Internal, Informational 14/17
16. C/C++ Coding Guidlines
1.11.5 Constants
Numerical constants (literals) should not be coded directly, except for -1, 0, and 1, or other
numbers in loop counters.
1.11.6 Variable Assignments
Avoid assigning several variables to the same value in a single statement. It is hard to read.
Example:
fchar = lchar = ācā; /* AVOID! */
Do not use the assignment operator in a place where it can be easily confused with the equality
operator. Example:
if (file = fopen(...))
{ /* AVOID! */
...
}
should be written as
if ((file = fopen(...)) != NULL)
{
...
}
Do not use embedded assignments in an attempt to improve run-time performance. This is the
job of the compiler. Example:
d = (a = b + c) + r; /* AVOID! */
should be written as
a = b + c;
d = a + r;
1.11.7 Miscellaneous Practices
Parentheses It is generally a good idea to use parentheses liberally in expressions involving
mixed operators to avoid operator precedence problems. Even if the operator precedence seems
clear to you, it might not be to others-you shouldnāt assume that other programmers know
precedence as well as you do.
if (a == b && c == d) /* AVOID! */
if ((a == b) && (c == d)) /* RIGHT */
2002/05/02 ā 22:26:22
Internal, Informational 15/17
17. C/C++ Coding Guidlines
Returning Values Try to make the structure of your program match the intent. Example:
if (booleanExpression)
{
return true;
}
else
{
return false;
}
should instead be written as
return booleanExpression;
Similarly,
if (condition)
{
return x;
}
return y;
should be written as
return (condition ? x : y);
There should only be one return statement in a function. Multiple returns can lead to confusion
when reading the code and is a freqent source of errors.
if(foo)
{
return a;
}
...
lots of code
...
return b;
should be written as
2002/05/02 ā 22:26:22
Internal, Informational 16/17
18. C/C++ Coding Guidlines
if(foo)
{
retval = a;
}
else
{
...
lots of code
...
retval = b;
}
return retval;
Expressions before ā?ā in the Conditional Operator If an expression containing a binary
operator appears before the ? in the ternary ?: operator, it should be parenthesised. Example:
(x >= 0) ? x : -x;
Special Comments Use XXX in a comment to ļ¬ag something that is bogus but works. Use
FIXME to ļ¬ag something that is bogus and broken.
Compilation with warnings enabled It is recommended that developers compile with all
warnings enabled. Compiler warnings often ļ¬ag dubious practices and common coding errors.
2002/05/02 ā 22:26:22
Internal, Informational 17/17