abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 12:44 | Komunita

Byly zveřejněny exploity na Nintendo Switch a platformu Tegra X1: Fusée Gelée a ShofEL2. Jejich zneužití nelze zabránit softwarovou aktualizací. Na druhou stranu exploity umožní na Nintendo Switch snadno a rychle nainstalovat Linux, viz. ukázka na YouTube.

Ladislav Hagara | Komentářů: 0
dnes 00:55 | Nová verze

Byla vydána verze 2.12.0 QEMU (Wikipedie). Přispělo 204 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn. Řešeny jsou také bezpečnostní chyby Meltdown a Spectre.

Ladislav Hagara | Komentářů: 2
dnes 00:33 | Komunita

Google zveřejnil seznam 1 264 studentů přijatých do letošního Google Summer of Code. Přehled projektů, studentů, 212 organizací a mentorů je k dispozici na stránkách GSoC.

Ladislav Hagara | Komentářů: 0
včera 23:55 | Nová verze

Oracle vydal verzi 1.0 univerzálního virtuálního stroje GraalVM, který umožňuje běh programů napsaných v jazycích založených na JVM, JavaScript, LLVM bitcode a experimentálně Ruby, R a Python.

razor | Komentářů: 1
včera 01:22 | Zajímavý článek

Julia Evans pomocí svých kreslených obrázků proniká do Linuxu a informačních technologií. Vedle ucelených zinů publikuje také jednotlivé kreslené obrázky (RSS).

Ladislav Hagara | Komentářů: 5
23.4. 13:22 | Zajímavý software

Jordi Sanfeliu vydal verzi 1.0.0 svého unixového jádra Fiwix (Wikipedie) určeného také pro výuku operačních systémů. Dle článku na OSNews na něm začal pracovat již před více než dvaceti lety. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT. Stáhnout a vyzkoušet lze živou disketu nebo CD s GNU/Fiwixem.

Ladislav Hagara | Komentářů: 5
23.4. 06:00 | Nová verze

Byla vydána nová verze 10.7 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu. Vývojáři GitLabu zdůrazňují Web IDE (YouTube) a SAST (Static Application Security Testing) pro Go a C/C++.

Ladislav Hagara | Komentářů: 8
22.4. 14:00 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, zveřejnil na svém blogu recenzi notebooku Librem 13 od společnosti Purism. Používá jej již sedm měsíců a s ním i jako umělec spokojen. Potřebu francouzské AZERTY klávesnice vyřešil přelepkami. Na displej se podíval kalibrační sondou, barvy vyladil pomocí open source softwaru DisplayCAL, v aplikaci Inkscape nastavil zvětšování na 170 % aby 1 cm v Inkscapu byl 1 cm v reálu. Webovou kameru, mikrofon, Wi-Fi a Bluetooth lze na Librem 13 hardwarově vypnout.

Ladislav Hagara | Komentářů: 7
21.4. 23:44 | Komunita

Několik posledních verzí GNOME Shellu obsahuje chybu způsobující memory leak (únik paměti). Viz například videozáznamy verzí 3.26 nebo 3.28. Nalezení chyby #64 a její opravě se věnuje Georges Basile Stavracas Neto v příspěvku na svém blogu [reddit].

Ladislav Hagara | Komentářů: 2
21.4. 10:33 | Komunita

V pondělí měl na YouTube online premiéru otevřený krátký 2D film Hero vytvořený v 3D softwaru Blender. Cílem stejnojmenného projektu Hero je vylepšit nástroj Grease Pencil (tužka) v Blenderu 2.8.

Ladislav Hagara | Komentářů: 4
Používáte na serverech port knocking?
 (2%)
 (7%)
 (46%)
 (27%)
 (18%)
Celkem 371 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník

    Side Effects of C Macros

    11.3.2017 20:27 | Přečteno: 941× | Ostatní | poslední úprava: 11.3.2017 20:38

    After typing Ctrl-D the fgets() function will read EOF and the program will be terminated.
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    #define myupper(c)	((c) >= 'A' && (c) <= 'Z')
    
    enum {
    	MAX = 100
    }; 
    
    int main()
    {	
    	int uppermacro(char *str);
    	int ctypefun(char *str);
    	
    	
    	char str[MAX];
    	int nupper;	
    	
    	while (fgets(str, MAX, stdin) != NULL) {
    	
    		if (str[strlen(str) - 1] == '\n')
    			str[strlen(str) - 1] = '\0';
    	
    		nupper = uppermacro(str); 
    		printf("upper macro: %d\n", nupper);
    	
    		nupper = ctypefun(str);
    		printf("ctype function: %d\n", nupper);
    	}
    	
    	return 0;
    }
    
    int uppermacro(char *str)
    {
    	int nupper = 0;
    	
    	while (*str != '\0')	{
    		if (myupper(*str++))	
    			nupper++;		
    	}
    	
    	return nupper;	
    }	
    
    int ctypefun(char *str)
    {
    	int nupper = 0;
    	
    	while (*str != '\0')	{
    		if (isupper(*str++))
    			nupper++;		
    	}
    	
    	return nupper;	
    }
    
            /* 
    	while (myupper(c = getchar())) ...	ERROR
    	while (isupper(c = getchar())) ...	WORKS
    	while ((c = getchar()) != EOF &&
    	isupper(c)) ... 			SAFER
    	*/
    
    Takový blog sem ještě patří?        

    Hodnocení: 17 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    ⧠ A = 0 avatar 11.3.2017 20:43 ⧠ A = 0 | skóre: 8 | blog: Technokratovo_zrcadlo | Helsinki
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    А какой же это блог?
    Nevolte zmrdy.
    11.3.2017 21:34 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Definície (lokalných) funkcií nedefinuj v main(), ale mimo main(), pred definície globalných premenných.

    Píš štylom, že main() funkcia je ako posledná v zdrojáku, alebo na konci je posledná najdôležitejšia funkcia v zdrojáku, ak sa tam nenachádza funkcia main.

    Tá podmienka if je zbytočná:
    if (str[strlen(str) - 1] == '\n')
       str[strlen(str) - 1] = '\0';
    Lebo:
    fgets()  reads in at most one less than size characters from stream and
           stores them into the buffer pointed to by s.
    echo -e "123456"|./check_end_fgets 
    49 '1'
    50 '2'
    51 '3'
    0 ''
    
    Testovací kód:
    #include <stdio.h>
    #include <stdlib.h>
    
    void check_end_fgets()
    {
    	char buffer[4];
    	int a;
    	char *p;
    	
    	if(fgets(buffer, 4, stdin) == NULL)
    		return;
    	
    	for(p=buffer,a=0;a<4 && *p != '\n'; a++,p++)
    		printf("%d '%c'\n", *p, *p);
    	
    }
    
    int main(void)
    {
    	check_end_fgets();
    	return 0;
    }
    
    11.3.2017 21:52 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Máš chybu:
    echo "LLLLLLLLLLLLLL"|./cod
    upper macro: 7
    ctype function: 14
    
    Oprav si chybu vo funkcií uppermacro().
    12.3.2017 07:38 sad
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Tu chybu jsem tam udělal schválně. Jedná se o srovnání dvou stejných funkcí, které vrací počet velikých písmen s tím rozdílem, že jedna používá vlastní makro myupper() a druhá funkci isupper() ze standardní knihovny.

    Problém je v tom, že se ta dekrementace do makra přenese dvakrát:
    ((*str++) >= 'A' && (*str++) <= 'Z')
    
    12.3.2017 07:39 sad
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Inkrementace.
    12.3.2017 09:17 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Proto je např. v manuálové stránce ke getc() upozornění, že na rozdíl od fgetc() může být implementována jako makro, které argument vyhodnocuje víc než jednou.
    12.3.2017 09:54 sad
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Tak to jsem nevěděl. Díky za upozornění.
    11.3.2017 21:26 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Hodil by se k tomu nejaky komentar...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    11.3.2017 21:57 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Pozri komentár na konci zdrojáku.
    12.3.2017 11:08 Dušan Kreheľ | skóre: 9 | blog: krehel_sk___informovat_o_novych_verziach_softveru | Prešov
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Poznáš príkaz:
    cpp source.c -o source_cpp.h
    12.3.2017 13:02 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Ano, znam preprocesor i jeho ulohu a to do te miry, abych vedel, ze vystupem preprocesoru neni hlavickovy soubor, ale soubor ciste v jazyce C.

    Jinak ma poznamka se tykala toho, ze bez dalsiho komentare je ten clanek zbytecny. Trochu zkuseny programator na prvni pohled vidi, v cem je problem. Zacatecnikovi to moc nerekne a ani nevi, jak se z toho poucit pri psani maker.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    oryctolagus avatar 11.3.2017 23:48 oryctolagus | skóre: 29 | blog: Untitled
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    #define myupper(c) ((c) >= 'A' && (c) <= 'Z')

    se dá nahradit něčim jako

    #define myupper(c) ((unsigned long)(c - 'A') <= 'Z' - 'A')

    (ale je to trochu prasárna)
    12.3.2017 02:30 pc2005 | skóre: 35 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    C makra? Tohle byla taky vtipná situace. Stringifikace jména argumentu pro vnitřní makro :-D.
    13.3.2017 19:48 Odin1918 | skóre: 4 | blog: Valhalla
    Rozbalit Rozbalit vše Re: Side Effects of C Macros
    Pouzivat makra na toto je antipattern a stejne tak je antipattern inkrementovat argument v ramci volani procedury, ktera je v tomto pripade jeste k tomu makrem. Vede to k errorprone kodu, ktery se neda cist. Vice radek muze byt nekdy citelnejsi.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.