© Harry Broeders.
Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Academie voor Technology, Innovation & Society Delft.
++a
a += b
++a
is een
aflkorting voor a = a + 1
en a += b
is een afkorting
voor a = a + b
. Ik ga deze afkortingen later ook gebruiken maar
ik ben van mening dat, als je net begint met programmeren, het beter is om
het zo simpel mogelijk te houden en dus gebruik ik in het begin deze afkortingen
nog niet. De auteurs van het boek denken daar blijkbaar anders over.
5. In Microsoft Visual C++ 2010 is genest commentaar niet toegestaan
(2_15_5.c):
#include <stdio.h>
int main(void) {
/* Dit is een proging om /* commentaar */ te nesten */
return 0;
}
Het compileren van dit programma geeft de volgende foutmeldingen (allemaal op regel 4):
..\gesprg\progs\2_15_5.c(4): 'te' : undeclared identifier ..\gesprg\progs\2_15_5.c(4): syntax error : missing ';' before identifier 'nesten' ..\gesprg\progs\2_15_5.c(4): expression has no effect; expected expression with side-effect ..\gesprg\progs\2_15_5.c(4): '*/' found outside of comment ..\gesprg\progs\2_15_5.c(4): 'nesten' : undeclared identifier ..\gesprg\progs\2_15_5.c(4): error C2059: syntax error : '/'
Ook de opensource compiler gcc accepteert geen genest commentaar. De compiler gcc geeft de volgende foutmeldingen (beide op regel 4):
2_15_5.c: In function 'main': 2_15_5.c:4:47: error: unknown type name 'te' 2_15_5.c:4:57: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
7.
2_15_7.c:
#include <stdio.h>
int main(void) {
int 3id;
int __yes;
int o_no_o_no;
int 00_go;
int star*it;
int 1_i_am;
int one_i_aren't;
int me_to-2;
int xYshouldl;
int int;
return 0;
}
Het compileren van dit programma geeft de volgende foutmeldingen(sommige foutmeldingen zijn het gevolg van eerdere fouten):
..\gesprg\progs\2_15_7.c(4): error C2059: syntax error : 'bad suffix on number' ..\gesprg\progs\2_15_7.c(4): error C2143: syntax error : missing ';' before 'constant' ..\gesprg\progs\2_15_7.c(4): error C2059: syntax error : 'empty declaration' ..\gesprg\progs\2_15_7.c(4): error C2146: syntax error : missing ';' before identifier 'id' ..\gesprg\progs\2_15_7.c(4): warning C4555: expression has no effect; expected expression with side-effect ..\gesprg\progs\2_15_7.c(4): error C2065: 'id' : undeclared identifier ..\gesprg\progs\2_15_7.c(4): warning C4555: expression has no effect; expected expression with side-effect ..\gesprg\progs\2_15_7.c(5): error C2143: syntax error : missing ';' before 'type' ..\gesprg\progs\2_15_7.c(6): error C2143: syntax error : missing ';' before 'type' ..\gesprg\progs\2_15_7.c(7): error C2059: syntax error : 'bad suffix on number' ..\gesprg\progs\2_15_7.c(7): error C2143: syntax error : missing ';' before 'type' ..\gesprg\progs\2_15_7.c(8): error C2143: syntax error : missing ';' before 'type' ..\gesprg\progs\2_15_7.c(9): error C2059: syntax error : 'bad suffix on number' ..\gesprg\progs\2_15_7.c(9): error C2143: syntax error : missing ';' before 'type' ..\gesprg\progs\2_15_7.c(10): error C2143: syntax error : missing ';' before 'type' ..\gesprg\progs\2_15_7.c(10): error C2001: newline in constant ..\gesprg\progs\2_15_7.c(12): error C2143: syntax error : missing ';' before 'type' ..\gesprg\progs\2_15_7.c(13): error C2632: 'int' followed by 'int' is illegal ..\gesprg\progs\2_15_7.c(13): error C2143: syntax error : missing ';' before 'type'
Conclusies:
3id
is
geen geldige identifier omdat het begint met een
cijfer (3
).
__yes
is
wel een geldige identifier, maar identifiers die
beginnen met een _ zijn gereserveerd voor "het
systeem".
o_no_o_no
is wel een
geldige identifier.
00_go
is
geen geldige identifier omdat het begint met een
cijfer (0
).
star*it
is geen
geldige identifier omdat er een *
in voorkomt.
1_i_am
is geen
geldige identifier omdat het begint met een cijfer (1
).
one_i_aren't
is geen geldige identifier
omdat er een '
in voorkomt.
me_to-2
is geen
geldige identifier omdat er een -
in voorkomt.
xYshouldl
is wel een
geldige identifier.
int
is
geen geldige identifier omdat int
een
gereserveerd woord (keyword) is (zie tabel op pagina 63).
Als we alle ongeldige identifiers verwijderen dan compileert het programma zonder fouten:
#include <stdio.h>
int main(void) {
int __yes;
/* kies liever een andere naam want deze is gereserveerd! */int o_no_o_no;
int xYshouldl;
return 0;
}
9. Dit programma compileert inderdaad zonder fouten.
main(
){float qx,
zz,
tt;printf("gimme 3"
);scanf
("%f%f %f", &qx,&zz
,&tt);printf("gemiddeldeis=%f",(qx+tt+zz)/3.0);}
Hier is de opgeschoonde versie
2_15_9.c:
#include <stdio.h>
int main(void) {
double getal1, getal2, getal3;
printf("Geef 3 floating point getallen: ");
scanf("%lf%lf%lf", &getal1, &getal2, &getal3);
printf("Het gemiddelde = %f", (getal1 + getal2 + getal3) / 3.0);
fflush(stdin);
getchar();
return 0;
}
1.
3_13_1.c:
#include <stdio.h>
int main(void) {
double x = 123.45123451234512345;
double y = 123.45123451234512300; /* laatste 2 cijfers verschillen */
printf("%.17f %.17f\n", x, y);
getchar();
return 0;
}
Dit programma print inderdaad 2x hetzelfde getal. Het type
double
heeft niet genoeg significante
cijfers om het verschil op te slaan.
Een double heeft minimaal 15 en maximaal 17 significante cijfers (zie double.htm).
Als we y
op 4 nullen laten eindigen dan zien we wel een verschil: