• ú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
    /* Toto je klub především pro lidi, pro které je programování jednou z mnoha massive multiplayer online počítačových her, které lze hrát.
        V tomto klubu hrozí sémantická hereze a nezdravě vysoký obsah syntaktického cukru. Nevhodné pro algoritmické diabetiky.
        Od účastníků debaty se předpokládá automaticky přístup k instalovanému GNU C: sudo apt-get install build-essential
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    C (programovací jazyk)#C99 Heslo na české Wikipedii
    Jazyk C - Základy praktického programování V Praze 2oo7 pro SSPŠ Tomáš Harvie Mudruňka a kolektiv - jak si programování v C představuje většina lidí
    http://stevenkobes.com/ctest.html C Programming Puzzlers - nepouštějte se do flamewars v tomhle klubu, pokud neuhodnete aspoň polovinu správně!
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    http://en.wikipedia.org/wiki/C99 C99 is a modern dialect of the C programming language.
    http://cprogramminglanguage.net/ C programming language
    http://cprogramminglanguage.net/c-programming-language-tutorial.aspx C programming language - úvod
    http://en.wikipedia.org/wiki/Criticism_of_the_C_programming_language C makes it easy to shoot yourself in the foot. (ještě že ne do hlavy...)
    http://en.wikipedia.org/wiki/C_preprocessor
    http://gcc.gnu.org/onlinedocs/gcc/Variadic-Macros.html C99 makra s proměnným počtem argumentů - __VA_ARGS__
    http://gcc.gnu.org/onlinedocs/gcc/ GNU C Compiler
    http://gcc.gnu.org/onlinedocs/gcc-4.2.2/gcc/Optimize-Options.html
    http://bellard.org/tcc/ Tiny C Compiler - prý C99 compliant (min. umí __VA_ARGS__) - vhodný pro skriptování v C - umí #!/usr/bin/tcc -run
    http://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest - pokud jste neviděli tohle, tak jste ještě neviděli opravdu nečitelný C zdroják
    http://bellard.org/otcc/ Obfuscated Tiny C Compiler - z tohohle vtípku vznikl Tiny C compiler
    http://en.wikipedia.org/wiki/ANSI_C Jak se střelit do nohy standardizovaným způsobem.
    http://eli-project.sourceforge.net/c_html/c.html ANSI C Specification
    http://www.lysator.liu.se/c/ Různý ANSI C bordel
    http://www.cs.rit.edu/~ats/books/ooc.pdf Object Oriented Programming with ANSI-C - a pak že to nejde
    http://en.wikipedia.org/wiki/Longjmp co jsou to setjmp()/longjmp() knihovní funkce (pro všechny, podle kterých to bez C++ try { } catch() ... nejde)
    http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/dcdc710c27f47c72 C neumí správně počítat (?)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    http://www.fastcgi.com/ FastCGI is simple because it is actually CGI with only a few extensions.
    http://www.metalshell.com/source_code/18/Mysql_Select.html How to do a simple connection and select with mysql
    http://xmlsoft.org/ The XML C parser and toolkit of Gnome
    http://curl.haxx.se/libcurl/ libcurl - the multiprotocol file transfer library
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    https://dev.arachne.cz/svn/cll1h SVN/Trac jazyka C<<1 (user-friendly nadstavba nad ANSI C99 - ve stylu JQuery vs. JavaScript)
    Benchmark iterace a serializace stringů v různých jazycích vs. v C
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        moderátor se velice zhruba řídí zvyklostmi moderace, která kdysi platila v řadě konferencí sítě FidoNet ... C != 0xdead */
    rozbalit záhlaví
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Err... ja tim chtel rict ze anonymni uniony uz dost mozna mas implementovany.
    A bez pretezovani operatoru ti vznikne... no, evidentne ma ted C nativni podporu komplexnich cisel. Enjoy. (V pristi verzi urcite nekdo vymysli nativni podporu matic a vektoru)
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: v podstatě, je možné, že nakonec skončím u toho "D", jestli to nějak Doladěj.

    Víceméně na C++ mi nevadí ani tak, že je objektové - ale vadí mi zmatek reference vs. pointery (tušil jsem, že mi to vadí, teď už mám i vysvětlené od někoho, že je to fakt co mi vadí), přetěžování operátorů, a takové různé věci. A třeba mi chybí i kontejnerová konstukce typu for_each() ... což je prostě abstrakce, která by v jazyce, který se tváří jako "vyšší" měla být normou. (a ne... tím, že se pro každý prvek kontejnerové třídy přetíží operátor ++ to z hlediska laika není nahrazené dostatečně :-) )
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ja jak nedelam v cistym C tak nevim, ale C++ tohle ma uz alespon 5 let (to sem to tak poprvy pouzil, rekl bych). Dost mozna i dyl.
    Jestli to je C++ vec nebo nejaka univerzalni extenze kterou maj vsichni a jen se ted dostala do standardu (jako secure fce), to ti nepovim.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: mě popravdě zaujal nejvíc ten anonymní struct/union. to by mohlo vyřešit spoustu haluzí s přetypováním....
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Tak zejo, treba C++ concepts nakonec z finalni verze zrusili mimo jine i proto, ze zadnej kompilator nemel funkcni verzi. Takze bych se vubec nedivil kdyby GCC/ICC mely pomerne hodne nakroceno k plny implementaci v momente finalizace C11 standardu.
    XCHAOS
    XCHAOS --- ---
    GCC already says: [gnu.org]

    A fourth version of the C standard, known as C11, was published in 2011 as ISO/IEC 9899:2011. GCC has limited incomplete support for parts of this standard, enabled with -std=c11 or -std=iso9899:2011. (While in development, drafts of this standard version were referred to as C1X.)
    XCHAOS
    XCHAOS --- ---
    nj. musím jít balit dárky, takže to musím odložit, ale jsem zvědav :-)
    C1X - Wikipedia, the free encyclopedia
    http://en.wikipedia.org/wiki/C1X

    specifikace je už venku dýl - dnes o tom psali akorát na slashdotu :-)
    XCHAOS
    XCHAOS --- ---
    Všichni Céčkaři dostali od ISO vánoční dárek, tak jsem zvědav, jestli není čas aktualizovat název klubu:
    http://developers.slashdot.org/story/11/12/24/0145238/iso-updates-c-standard
    http://www.h-online.com/open/news/item/ISO-updates-C-standard-1400814.html
    http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57853

    jsem zvědav, kdy začne GCC podporovat C1X. jinak tím pádem moje rozhodnutí přeorientovat se na čisté C99 a featury které podporuje bylo správné: teď je C99 jednoznačně "produkční", zatímco tohle je nová beta.
    XCHAOS
    XCHAOS --- ---
    DAVIDOWITCH: jako vidím výhodu kompilace u staticky typovaného jazyka - že zkontroluje, se funkcím nepředávají nekompatibilní parametry. kompilace u dynamicky typovaného jazyka (jako je PHP) sice asi zrychlí běh programu (o něco) - ale kód nebude o nic robustnější.
    DAVIDOWITCH
    DAVIDOWITCH --- ---
    XCHAOS: Ja to asi nechapu. Ja sem mel vzdycky dojem, ze VM je prave proto, ze se veci nekompilujou do nativniho kodu. Az on demand to pak resi ta VM (ktera ma jisty vyhody, jako treba ze v ramci JIT umi inlinovat i virtualni tridy, a jisty nevyhody, jako ze na loadu to chvili chrousta).

    Ale rozhodne zajimavy, pokud nekdo udela PHP frontend pro LLVM, tak to bude celkem fajn.
    XCHAOS
    XCHAOS --- ---
    sice C++ ale co... je to vzdáleně podobné téma jako to, na čem pracuju já:
    Facebook vyvíjí virtual machine pro PHP - Root.cz
    http://www.root.cz/zpravicky/facebook-vyviji-virtual-machine-pro-php/

    vtipné je, že s pre-kompilací do C++ končí, a místo toho budou vyvíjet (zřejmě JIT?) PHP compiler přímo do strojáku :-)
    XCHAOS
    XCHAOS --- ---
    TENCOKACISTROMY: hele, nejde :-) ani s přetypováním ne.

    (*((typ objektu *)(funkce_vracejici_objekt())->interface->metoda))(objekt, parametry)

    ... chápeš? prostě objektový model pro čisté C sice existuje, a je i docela elegantní (může být i strukturovaný, když nezahrnuje dědění) - ale prostě když ti funkce vrátí objekt, musíš pracovat s pointerem na něj - nemůžeš ten samý objekt jednoduše předat nějaké metodě (šlo by to, kdyby C mělo nějaké "self" nebo "this" - což ovšem nemá).

    C++ někomu sedne, někomu ne. Nemá to cenu řešit. Ti, kdo mají C++ rádi, si musí uvědomit, že používají jazyk, který je sice mocný, ale nesedne všem. Sedne to lidem s nadáním pro vyšší matematiku - ale je to už příliš vzdálené přirozenému jazyku či "kupeckým počtům". To je celé. Nerozjíždějme další flejm.
    TENCOKACISTROMY
    TENCOKACISTROMY --- ---
    XCHAOS: v čistém C nikdy nevymyslím objektovou syntaxi, která by umožnovala zavolat metodu u objektu vráceného nějakou funkcí.
    Tak ono by to slo ... otazkou ale je, jestli by pak precijen nebylo lepsi pouzit to C++ :)
    XCHAOS
    XCHAOS --- ---
    JACHYMKO: to asi ne - jako dialekt to dělám právě proto, že na tyhle věci jsem líný :-)
    ale zase takový pre-compiler, který by uměl věci, co v C principiálně nejsou...
    PHP: Operator Precedence - Manual
    http://www.php.net/manual/en/language.operators.precedence.php

    - líbily by se mi porovnávací operátory === a ~= (ten jsem dřív navrhoval pro Python a není ani v tom PHP)
    - v čistém C nikdy nevymyslím objektovou syntaxi, která by umožnovala zavolat metodu u objektu vráceného nějakou funkcí

    Pre-compilery do čistého C se ale dělají i z Pythonu, není to nic nového... osobně bych spíš než nějaký úplně nový jazyk udělal pre-compiler třeba z Pythoní syntaxe do mého dialektu jako do mezijazyka (BTW - na rozdíl od těch stávajících precompilerů by nevyžadoval statické typování a umožnoval by mi rozhodovat o věcech, jako jestli porovnání objektů odlišného typu vyhodí exception nebo ne...)
    XCHAOS
    XCHAOS --- ---
    update: co jste mých prasomaker týče, vyhráli jste bitvu (ale ne válku).

    rozhodl jsem se, že původní nápad:

    for_selected(...) { }

    by byla po mém zobecnění:

    for_each(typ_polozky,polozka,typ_seznamu,seznam,...) { }

    asi fakt prasárna. na jednoduchém zápise

    for_each(...) if (podmínka) { }

    fakt není nic špatného, možná jsem to s tou snahou o větší čitelnost kodu fakt vzal ze špatného konce (ted to vidím tak, že pokud se budu snažit o makro-dialekt, mělo by těch maker být co nejméně - nejlépe méně než deset, z toho tak max. 2-3 by se týkaly flow-control...)

    (změnil jsem to dokonce i ve starších verzích kodu na bázi C<<1 maker :-))

    na druhou stranu - mám svrbění pořád nějak "zčitelnovat" nalezení jednoho prvku:

    for_each(...) if (podmínka) break;

    ...ale nevím, jestli to nenechám přeci jen být... (fakt je, že break; a continue; v cyklech jsou naprostý základ, který si stejně musí nastudovat každý, kdo chce s jakýmikoliv cykly vážně pracovat)
    ANT_39
    ANT_39 --- ---
    XCHAOS: Imho je to tam uz dyl, a se standardem to (opet imho) nesouvisi. Jednak je printf builtin, cili gcc o nem "vi": zkus treba printf("blabla\n"), gcc ti z toho vyrobi puts("blabla"). Mimo to, gcc ma __attribute__((format(...))), kterym se tohle myslim da deklarovat.
    XCHAOS
    XCHAOS --- ---
    Ok... konec offtopiců, po delší době.

    Jedna z drobných, ale podstatných vychytávek u kompilace čistého C zdrojáku pod GNU C, kterou jsem zaregistroval v poslední době:

    prometheus.c: In function ‘main’:
    prometheus.c:1751: warning: format ‘%d’ expects type ‘int’, but argument 13 has type ‘char *’
    prometheus.c:1751: warning: too few arguments for format


    (mám pocit, že to tam bylo už dřív, ale hlídalo se to jen u režinu kompatiblity se standardem C99? každopádně nehlídání tohoto bylo častým zdrojem jak kritiky, tak i chyb... trochu tím C získalo násklok před interpretovanými dynamicky typovanými jazyky, které ale nějakým způsobem umožňují použití printf formátovacích stringů... )
    XCHAOS
    XCHAOS --- ---
    XCHAOS
    XCHAOS --- ---
    XCHAOS
    XCHAOS --- ---
    Obecný problém programátorů :-)
    XCHAOS
    XCHAOS --- ---
    Kliknutím sem můžete změnit nastavení reklam