22.02.2014 | 17:57
Nakon kratkog vremena nećkanja, odlučio sam pročitati(proučiti) tu, kako svi kažu legendarnu knjigu - K&R. Odluka je pala, jer sam znao(znam) C jezik površno, i zato jer me zanima low level programiranje, dobro ipak ne sada asembler, ali zanima me memory managment, ono što se recimo kod drugih jezika, tipa Jave uopće ne treba ni brinuti.
Ulgavnom, neki ljudi govore kako je ta knjiga pisana previše "tehnički", i da je zastarjela, u smislu da te uči stilu programiranja koja vodi do loše održivog koda i previše izložavanju buffer overflowa, a da se tada prije 30. godina, o tome nije toliko vodilo računa. O ovom prvo, da je pisana previše "tehnički" je točno ali i odlično, jer u ovoj knjizi nema okolišanja, znači ona detaljno ne opisuje osnove programiranja i ugl. traži da imaš nekakvo predznanje o programiranju, i nastoji te što brže naučiti C jezikom(knjiga je relativno tanka). Kompajliranje koda,i općenito o kompajleru isto ne piše, tako da taj dio treba naučiti negdje drugdje. Dobro mi je kod knjige to što te vuče na to da sam pišeš kod i eksperimentiraš s primjerima, i da sam dokučiš neke stvari npr. kod poglavlja 1.6 Arrays primjer
#include <stdio.h>
/* count digits, white space, others */
main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
}
Na 14. liniji gdje se array ndigit iterira u uglatoj zagradi je napisano[c-'0'], logično mi je bilo da je tamo samo varijabla c u zagradi, jer bi dobio isti broj, ali eto eksperimentiranjem došao sam da ako ostavim samo varijablu c, neće mi ostaviti taj broj, nego će dati broj koji u ascii kodu reprezentira taj broj u decimalnoj vrijednosti. Zaključio sam da C jezik, tretira znakove kao integer vrijednosti, odnosno decimalna vrijednost u ascii kodu, ali ako radimo računske operacije između znakova, nećemo dobiti decimalnu vrijednost u ascii kodu, nego ćemo dobiti točnu vrijednost, i zato je trebalo na 14. liniji dodati [c-'0'].
Ako je netko pročitao knjigu, volio bi čuti razmišljanja o knjizi