nZaehler =
10 * Intervallbeginn() * OFFSET - Sicherheitsabstand();
if
(
((MIN_INTERVAL < nZaehler)
&& (MAX_INTERVAL > nZaehler)) ||
(0 == nZaehler)
)
{
Anweisungen();
}
memcpy
(
pZiel,
pQuelle,
lGroesse
);
Die Operatoren Dereferenzierung und Adresse stehen jedoch ohne Leerzeichen bei dem Namen, für den sie angewendet werden. Werden sie für einen Ausdruck verwendet, ist dieser Ausdruck zu klammern.
|
C/C++ |
Pascal/Delphi |
| int i = 27 * *pSumme; y = f(17 + &x); float x = *(pPuffer->m_pDaten); |
i := 27 * pSumme^; y := f(17 + @x); x := (pPuffer^.m_pDaten)^; |
double* pSumme;
float Funktion(const CComplex& Naeherung);
besser:
|
C/C++ |
Pascal/Delphi |
| typedef double* PDOUBLE; PDOUBLE pMittelwert, pVarianz; |
type PDOUBLE = ^double; var pMittelwert, pVarianz: PDOUBLE; |
f(c), Pi() + 13, if (bBedingung),
aber nicht:
f (c), f( c ), Pi()+13
if (NULL == pDatenpuffer)
{
return;
}
LONG(nAnzahl) * Groesse(); // C++
bzw.
(LONG)(nAnzahl) * Groesse(); /* C */
und nicht
(LONG) nAnzahl * Groesse();
damit der Bereich des Casts deutlich wird.
nLaenge = (NULL != p) ? ::strlen(p) : 0;
// Parameter von ::strlen() darf nicht NULL sein.
|
C/C++ |
Pascal/Delphi |
| Anweisungen();
for (i = 0; LIMIT > i; ++i) Anweisungen(); |
Anweisungen;
for i := 0 to Pred(LIMIT) do Anweisungen; |
(C, C++) Case-Labels in einer switch-Anweisung dürfen zusammengefaßt werden (d.h. zwischen den Case-Labels steht kein Code). Darauf ist am Beginn der Gruppe hinzuweisen. Fehlt die break-Anweisung zwischen zwei Fällen (d.h. zwischen den Case-Labels steht Code), so ist hierauf deutlich hinzuweisen und das Folge-Label ist in dem Kommentar ausdrücklich zu erwähnen!
switch (nNumber)
{
case 1:
int n = 0;
Anweisungen();
break;
// Fall-Gruppe: Erläuterung der Gemeinsamkeit
case 2:
case 3:
case 4:
Anweisungen();
break;
case 5:
Anweisungen();
//-- Kein break; weiter
bei 6 --//
case 6:
Anweisungen();
break;
}
(C) Alternativ kann eine switch-Anweisung auch derart formatiert werden, daß die Anweisungen eine und die Case-Labels eine halbe Ebene weit eingerückt werden, wenn aufgrund compilerspezifischer Gegebenheiten (Effizienzgründe) der Aufruf von Funktionen zu teuer wäre und mehrere Steuerkonstrukte im switch-Block verschachtelt werden müssen:
switch (nNumber)
{
case 1:
Anweisungen();
break;
default:
Anweisungen();
break;
}
while (!IstTimerAbgelaufen())
{
}
| while (bBedingung) { Anweisung(); } while (Bedingung()) |
|
| Unzulässig: | while (bBedingung) Anweisung(); while (bBedingung); |
|
C/C++ |
| int Summe(const int n1, const int n2, float f);
void PushBefehl |
|
Pascal/Delphi |
| function Summe(const n1, n2: integer; f: single): integer;
procedure PushBefehl |
void VerschwendeZeit(void);
|
C/C++ |
Pascal/Delphi |
| void PushBefehl // Kommentare ( PStack pBefehlsStack, // Liste der ausgeführten Befehle const CBefehl einBefehl // abzulegender Befehl ) { Anweisungen(); } int Systemstatus |
procedure PushBefehl // Kommentare ( PStack pBefehlsStack, // Liste der ausgeführten Befehle const CBefehl einBefehl // abzulegender Befehl ) { Anweisungen; } |
CComplex::CComplex
// Kommentare
(void)
: m_dfRealteil(0.0),
m_dfImaginaerteil(0.0)
{
}
|
C++ |
Pascal/Delphi |
| if (0 < ::strlen(lpszName)) { ::printf("Hallo %s.", lpszName); } |
if (0 < System.Length(sName)) begin System.Write('Hallo ', sName, '.'); end {if}; |
int msg_nGesamtFehleranzahl = 0; // Anzahl aller im System aufgetretenen
Fehler
int msg_nLetzteFehleranzahl = 0; // Anzahl der beim letzten Funktionsaufruf
//
aufgetretenen Fehler
Unzulässig:
int msg_nGesamtFehleranzahl = 0, msg_nLetzteFehleranzahl = 0;
// Anzahl der insgesamt bzw. beim letzten Funktionsaufruf
// aufgetretenen Fehler
Unzulässig:
private:
CKlasse m_a, m_b, m_c;
(C++/Delphi) Properties dürfen am Ende aufgeführt werden, da Properties auch auf private-Elemente zugreifen können.
class CLinientyp
{
public:
//-- Konstruktoren --//
CLinientyp
(
const int nLinientyp = SOLID_LINE,
const int nLiniendicke = NORM_WIDTH,
const unsigned uLinienmuster = 0
);
//-- Selektoren --//
int Linientyp(void) const;
int Liniendicke(void) const;
unsigned Linienmuster(void) const;
//-- Modifier --//
void VerwendeLinientyp(const int nLinientyp);
void VerwendeLiniendicke(const int nLiniendicke);
void VerwendeLinienmuster(const unsigned uLinienmuster);
protected:
//-- Agenten --//
virtual void Drucke(void);
virtual void Zeichne(void);
private:
//-- Datenelemente --//
int m_nLinientyp;
unsigned m_uLinienmuster;
int m_nLiniendicke;
};
|
Unzulässing und verwirrend: |
var u: Cardinal; var n: Integer; var x: Double; n := Integer(u); // Achtung Type-Cast… |
|
(etwas) besser: |
n := integer(u); // Type-Cast u := Trunc(x); // Funktionsaufruf |
#ifndef _FILENAME_H
#define _FILENAME_H
...
#endif
(C++) Bei der Implementierung von Template-Klassen kann die Implementierung der Funktionen in eine eigene Datei ausgelagert werden. Diese erhält die Erweiterung .h und wird nicht von der die Schnittstelle der Klasse beschreibenden Header-Datei mit #include eingeschlossen.
[zurück] | [weiter] | [Inhalt] | [Einleitung] | [Programmierstil] | [Anhänge]
Copyright © 1996-97 by Uwe Sauerland