C Language
Comments
Zoeken…
Invoering
Opmerkingen worden gebruikt om iets aan te geven aan de persoon die de code leest. Opmerkingen worden door de compiler als een blanco behandeld en veranderen niets aan de werkelijke betekenis van de code. Er zijn twee syntaxis gebruikt voor opmerkingen in C, de originele /* */
en de iets nieuwere //
. Sommige documentatiesystemen gebruiken speciaal opgemaakte opmerkingen om de documentatie voor code te helpen produceren.
Syntaxis
-
/*...*/
-
//...
(alleen C99 en later)
/ * * / gescheiden opmerkingen
Een opmerking begint met een schuine streep onmiddellijk gevolgd door een asterisk ( /*
) en eindigt zodra een asterisk onmiddellijk gevolgd door een schuine streep ( */
) wordt aangetroffen. Alles tussen deze karaktercombinaties is een opmerking en wordt door de compiler als een blanco behandeld (in principe genegeerd).
/* this is a comment */
De bovenstaande opmerking is een opmerking van één regel. Opmerkingen van dit /*
type kunnen meerdere regels omvatten, zoals:
/* this is a
multi-line
comment */
Hoewel het niet strikt noodzakelijk is, is een gebruikelijke stijlconventie met opmerkingen over meerdere regels het plaatsen van voorloopspaties en sterretjes op de regels na de eerste, en de /*
en */
op nieuwe regels, zodat ze allemaal op één lijn liggen:
/*
* this is a
* multi-line
* comment
*/
De extra sterretjes hebben geen functioneel effect op de opmerking, omdat geen van hen een gerelateerde schuine streep heeft.
Dit /*
type opmerkingen kunnen worden gebruikt op hun eigen regel, aan het einde van een coderegel of zelfs binnen coderegels:
/* this comment is on its own line */
if (x && y) { /*this comment is at the end of a line */
if ((complexCondition1) /* this comment is within a line of code */
&& (complexCondition2)) {
/* this comment is within an if, on its own line */
}
}
Opmerkingen kunnen niet worden genest. Dit komt omdat elke volgende /*
wordt genegeerd (als onderdeel van de opmerking) en de eerste */
bereikt wordt behandeld als het beëindigen van de opmerking. De opmerking in het volgende voorbeeld werkt niet :
/* outer comment, means this is ignored => /* attempted inner comment */ <= ends the comment, not this one => */
Om commentaar te geven op blokken code die opmerkingen van dit type bevatten, die anders zouden zijn genest, zie het commentaar met het voorbeeld van de preprocessor hieronder
// gescheiden opmerkingen
C99 introduceerde het gebruik van C ++ - stijl commentaar met één regel. Dit type opmerking begint met twee schuine strepen en loopt tot het einde van een regel:
// this is a comment
Dit type commentaar staat geen commentaar met meerdere regels toe, hoewel het mogelijk is om een commentaarblok te maken door verschillende opmerkingen van een enkele regel achter elkaar toe te voegen:
// each of these lines are a single-line comment
// note how each must start with
// the double forward-slash
Dit type opmerking kan op de eigen regel of aan het einde van een coderegel worden gebruikt. Omdat ze echter tot het einde van de regel lopen , mogen ze niet binnen een coderegel worden gebruikt
// this comment is on its own line
if (x && y) { // this comment is at the end of a line
// this comment is within an if, on its own line
}
Reageren met behulp van de preprocessor
Grote stukjes code kunnen ook worden " #if 0
" met behulp van de preprocessorrichtlijnen #if 0
en #endif
. Dit is handig wanneer de code opmerkingen met meerdere regels bevat die anders niet zouden nestelen.
#if 0 /* Starts the "comment", anything from here on is removed by preprocessor */
/* A large amount of code with multi-line comments */
int foo()
{
/* lots of code */
...
/* ... some comment describing the if statement ... */
if (someTest) {
/* some more comments */
return 1;
}
return 0;
}
#endif /* 0 */
/* code from here on is "uncommented" (included in compiled executable) */
...
Mogelijke valkuil door trigraphs
Tijdens het schrijven van //
gescheiden opmerkingen, is het mogelijk om een typografische fout te maken die hun verwachte werking beïnvloedt. Als men typt:
int x = 20; // Why did I do this??/
De /
aan het einde was een typfout, maar wordt nu geïnterpreteerd in \
. Dit komt omdat de ??/
een trigraph vormt.
De ??/
trigraph is eigenlijk een lange notatie voor \
, dat is het symbool van de lijnvervolging. Dit betekent dat de compiler denkt dat de volgende regel een voortzetting is van de huidige regel, dat wil zeggen een voortzetting van de opmerking, wat misschien niet de bedoeling is.
int foo = 20; // Start at 20 ??/
int bar = 0;
// The following will cause a compilation error (undeclared variable 'bar')
// because 'int bar = 0;' is part of the comment on the preceding line
bar += foo;