• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    XCHAOSANSI C/C99 (specifikace), GNU C (gcc, glibc), Tiny C (tcc) a POSIX - ne nutně C++,g++,libstdc++ nebo Win32 API
    XCHAOS
    XCHAOS --- ---
    XCHAOS
    XCHAOS --- ---
    Dennis Ritchie, Creator of C Programming Language, Passed Away - Slashdot
    http://tech.slashdot.org/story/11/10/13/0328230/dennis-ritchie-creator-of-c-programming-language-passed-away
    hustá, hustá, hustá debata, na Slashdotu...
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    Mne na celym tom tancovani kolem Jobse prislo asi nejsmutnejsi to, ze naprosta vetsina si ho pamatuje jen kvuli iphonu, ipadu a ipodu. Vesmes nikdo netusi co vlastne delal pred iphonem...
    XCHAOS
    XCHAOS --- ---
    Hmm, tak The server at stallman.org is taking too long to respond. tak se dnes nic nedozvíme.
    XCHAOS
    XCHAOS --- ---
    jako píšu teď takový společný smířlivý nekrolog pro oba současně, hodím sem pak odkaz.
    XCHAOS
    XCHAOS --- ---
    ANT_39: no, Stallman kritizoval nekritickou vlnu obdivu Jobsových fanoušků po jeho smrti... a vzápětí nám zemřel Ritchie.

    jako taky bych asi teď nepsal článek o některých vadách na kráse, které C nebo Unix mají, že ...
    ANT_39
    ANT_39 --- ---
    XCHAOS: Jak s tim souvisi Jobs a Stallman? O tom, co napsal, vim, ale spojeni mi unika.
    XCHAOS
    XCHAOS --- ---
    Zemřel Dennis Ritchie, tvůrce jazyka C a Unixu - Root.cz
    http://www.root.cz/zpravicky/zemrel-dennis-ritchie-tvurce-jazyka-c-a-unixu/
    O jeho smrti se dozvídáme teprve teď, protože se nikde neobjevila oficiální oznámení rodiny a běžná média Ritchieho neznají.

    Možná si Stallman minulý týden s tím Jobsem měl radši dát přeci jen pozor na jazyk... :-/
    Richard Stallman's Dissenting View of Steve Jobs - Slashdot
    http://tech.slashdot.org/story/11/10/10/1227229/richard-stallmans-dissenting-view-of-steve-jobs
    XCHAOS
    XCHAOS --- ---
    Dennis Ritchie, 1941-2011: Computer scientist, Unix co-creator, C programming language designer – Boing Boing
    http://boingboing.net/2011/10/12/dennis-ritchie-1941-2011-computer-scientist-unix-co-creator-c-co-inventor.html
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: libc má některé historické funkce vedené jako "deprecated" - viz např.
    man gets
    ...
    BUGS
           Never use gets().  Because it is impossible to tell without knowing the
           data  in  advance  how  many  characters  gets() will read, and because
           gets() will continue to store characters past the end of the buffer, it
           is  extremely  dangerous  to  use.   It has been used to break computer
           security.  Use fgets() instead.
    


    Jde o to, že spoustu let staré učebnice Céčka mohou vypadat všelijak. Např. scanf("%s",str) (bez formátovacího znaku) je podobně zlé, sice asi tam lze uvést max. délku, ale logika velí, že scanf je inverzní k printf() a prostě začátečníků by se to nemělo dostat pod ruku.

    Je fakt, že třeba přechod programátora uvažujícího v kategoriích událostma řízeného programování (či dokonce "vizuálního" programování) a třeba se znalostí Javascriptu/JQuery do Céčka si nějak vůbec neumím představit. Asi jediná cesta je když se někdo začne učit skriptovat pod unixem, tak pochopí ty základní koncepty (stdin, stdout, proces) - a potom logicky pochopí, že místo skriptu může chtít binárku, atd.... nedovedu si ale představit, že kdo programuje pro Windows, by nějak jednoduše ustoupil z úrovně abstrakcí jako události, objekty, apod. a rovnou přešel k Céčku.

    Myslím, že když i tady polovina debaty je o tom, zda používat Céčko místo C++ je obskurní, tak s těmi začátečníky je to složité. Buď prostě někdo objekty má rád a nebo ne.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    Nenapovidam, ja krom scanfu uz nacitim jen z input streamu do std::stringu, takze fakt netusim jestli na to libc nema nejakej fajn hack.

    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: no možná s tím scanf() jsem střelil vedle... největší zlo je gets().

    ve svém makro-dialektu jsem používal výhradně fgets(), ze streamu stdin, jak napovídáš. od gets se liší uvedením velikosti stringu. a právě proto, že syntaxe je trochu ukecaná, jsem začal pomýšlet na obalování těmi makry.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ok, a jak se nacita jinak? (streamum predpokladam moc nehovis)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: budiž, ale kdo ze začátečníků ho fakt použije? prostě nevím, jestli je dobré, aby se dnešní céčkaři začátečníci učili podle 20-30 let starých Getting started... sekcí různých manuálů, to je celé.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: scanf ma parametr kterej umoznuje urcite maximalni dylku stringu....
    REDGUY
    REDGUY --- ---
    XCHAOS: vždyť vypisuješ hodnotu pole[5] Ehm. 8))
    XCHAOS
    XCHAOS --- ---
    LUDO: život je krutý. jinak až to pole budeš chtít načítat, tak PROSÍMTĚ nepoužívej scanf(), ačkoliv některé starší manuály ti to mohou radit. nebo resp. můžeš ho používat právě tak ještě na ty integery a floaty - ale určitě ne na stringy.... a protože "všechno je string" (pokud se načítá např. něco ze souboru, apod.) tak první věc, před kterou bych začátečníka varoval je, že C si nic nehlídá: stejně jako nehlídá překročení velikosti pole, tak ani funkce libc nehlídají, jestli si alokoval dost velký string, apod. - toto je základní odlišnost proti většině vyšších jazyků.

    některé "kanonicke" funkce libc jsou nebezpečné, a právě když už by nějací začátečníci stáli o to začít s C od začátku (já počítám, že v tomhle klubu nejsi jediný, ale ostatní se drží stranou), tak by asi mohlo mít smysl varovat je před některými praktikami a postupy, které vedou k opravdu častým chybám.
    LUDO
    LUDO --- ---
    XCHAOS: jeeezis, to este ten printf musi do cyklu
    XCHAOS
    XCHAOS --- ---
    LUDO: no.. céčko prostě není python. (a i tam by ti to dělalo to samé, jen bys mohl vypsat jediným printem celé pole) vždyť vypisuješ hodnotu pole[5] - čemu se divíš?
    LUDO
    LUDO --- ---
    nejaka rada totalnemu zaciatocnikovi ako vypisat do konzoly pole?

    Nejaky totalne zakladny program:

    #include <stdio.h>

    int main(void)
    {
    int pole[6];
    int i;

    for (i = 0; i < 6; i++){
    pole[i] = i;
    }
    printf("%d ", pole[i]);

    return 0;
    }

    A vypisuje mi to len poslednu hodnotu.
    Kliknutím sem můžete změnit nastavení reklam