Kryptografická knihovna OpenSSL byla vydána v nové verzi 4.0. Přehled změn v souboru CHANGES.md na GitHubu. Odstraněna byla podpora SSLv2 Client Hello a SSLv3. Ve výchozím nastavení byla zakázána podpora odmítnutých eliptických křivek v TLS dle RFC 8422. Přibyla například podpora Encrypted Client Hello (ECH, RFC 9849).
curl up 2026, tj. setkání vývojářů a uživatelů curlu, proběhne opět v Praze. O víkendu 23. a 24. května v Pracovně.
Aplikace pro ověřování věku uživatelů on-line platforem je technicky hotová a brzy bude k dispozici pro občany EU, oznámila dnes předsedkyně Evropské komise Ursula von der Leyenová. Půjde podle ní o bezplatné a snadno použitelné řešení, které pomůže chránit děti před škodlivým a nelegálním obsahem. Aplikace bude podle ní fungovat na jakémkoli zařízení a bude zcela anonymní.
V prosinci 2012 byla z linuxového jádra odstraněna podpora procesorů 386. Včera započalo odstraňování podpory procesorů 486.
IuRe (Iuridicum Remedium) vyhlásila Ceny Velkého bratra za rok 2025. Slídily roku jsou automobilka Volkswagen, Meta a česká Ministerstva vnitra a průmyslu a obchodu. Autorem Výroku Velkého bratra je dánský ministr spravedlnosti zpochybňující právo na šifrovanou komunikaci. Naopak Pozitivní cenu získali studenti Masarykovy univerzity za odpor proti nucení do používaní aplikace ISIC.
Po osmi měsících vývoje byla vydána nová verze 0.16.0 programovacího jazyka Zig (Codeberg, Wikipedie). Přispělo 244 vývojářů. Přehled novinek v poznámkách k vydání.
Nejnovější X.Org X server 21.1.22 a Xwayland 24.1.10 řeší 5 bezpečnostních chyb: CVE-2026-33999, CVE-2026-34000, CVE-2026-34001, CVE-2026-34002 a CVE-2026-34003.
Po roce vývoje od vydání verze 1.28.0 byla vydána nová stabilní verze 1.30.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.30.
Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2026-04-13. Přehled novinek poznámkách k vydání. Nově ve výchozím nastavení příkaz sudo vyžaduje heslo.
Společnost Blackmagic Design oznámila vydání verze 21 svého proprietárního softwaru pro editování videí a korekci barev DaVinci Resolve běžícího také na Linuxu. Z novinek je nutno vypíchnout možnost editování fotografií. Základní verze DaVinci Resolve je k dispozici zdarma. Plnou verzi DaVinci Resolve Studio lze koupit za 295 dolarů.
Ukazatel je proměnná, která obsahuje jedinou hodnotu, a to adresu v paměti. Situace vypadá takto:
jméno: | ptr | hodnota: | 1424 | adresa: | 2124 | jméno: | | | | | | hodnota: | 5 | 6 | 7 | 8 | 9 | adresa: | 1424 | 1428 | 1432 | 1436 | 1440 |
Proměnná ptr má hodnotu 1424, což je adresa prvního prvku pole (získaného např. funkcí malloc()). Pokud napíšeme ptr[i], kde i == 2, vyhodnotí se výraz takto: vezmi hodnotu ukazatele ptr (tedy 1424), přičti k ní i-krát velikost datového typu, na který ptr ukazuje (takže 2*4) a vrať hodnotu na této adrese (1424 + 2*4 = 1432, hodnota 7).
jméno: | numbers | hodnota: | 3 | 4 | 5 | 6 | 7 | 8 | adresa: | 4000 | 4004 | 4008 | 4012 | 4016 | 4020 |
Všimněte si, že identifikátor numbers se vztahuje na celé pole. Jak se potom vyhodnotí numbers[i], kde i == 2? Naprosto stejně jako v předchozím případě. Vezme se hodnota numbers... a tady je zakopaný pes. Identifikátor numbers obsahuje pole několika čísel, které jako takové hodnotu nemá. Proto se použije adresa prvního prvku pole (tedy ta s indexem 0) a dál se postupuje stejně jako v předchozím případě: k adrese se přičte i*velikost prvku pole a hodnota, která se nachází na výsledné adrese (4000 + 2*4 = 4008, hodnota 5) se vrátí.
Pro pole a ukazatele tedy můžeme použít ono zjednodušení, protože ve většině případů se pole tváří jako ukazatel na první prvek. Říkám většině, protože se najdou dvě výjimky:
Zatímco sizeof(ptr) vrátí velikost ukazatele (na 32bitovém stroji 4), sizeof(numbers) vrátí součin počtu prvků a velikosti jednoho prvku (velikost pole v bytech, v našem případě 6*4 = 24).
Pro ukazatel je situace jednoduchá: výsledkem je adresa ukazatele na integer (datový typ **int). Pro pole je zajímavější: vznikne ukazatel na pole n čísel.
Pozor, ukazatel na pole N čísel (N musí jít vyhodnotit v době překladu) definujeme takto:
int (*ptrarr)[N]; //ukazatel na pole N integeru int *ptrarr[N]; // SPATNE! pole N ukazatelu na integer
Tady se zastavím, i když zápis nemusí být na první pohled jasný, protože se dostáváme k dvourozměrným polím, ke kterým je potřeba udělat odbočku stranou. Tedy prosím o kritiku, než se dostanu k něčemu zajímavějšímu.
Použitá literatura:
Ing. Miroslav Virius, Csc: Pasti a propasti jazyka C++, 2. aktualizované a rozšířené vydání, ISBN 80-251-0509-1
Tiskni
Sdílej:
int x(char *c) {} a int x(char c[]) {}?
gcc -S soubor.c. Tam by mělo být vidět, že je to stejné.
$ diff -u test1.s test2.s
--- test1.s 2010-10-23 20:01:04.090000164 +0200
+++ test2.s 2010-10-23 20:01:08.480000156 +0200
@@ -1,4 +1,4 @@
- .file "test1.c"
+ .file "test2.c"
.text
.globl main
.type main, @function
@@ -10,9 +10,7 @@
movq %rsp, %rbp
.cfi_offset 6, -16
.cfi_def_cfa_register 6
- leaq -16(%rbp), %rax
- addq $4, %rax
- movl $1, (%rax)
+ movl $1, -12(%rbp)
movl $0, %eax
leave
.cfi_def_cfa 7, 8
test1 používá *(pole+1)=1 a test2 používá pole[1]=1.
Ovšem jakmile povolím optimalizaci, alespoň -O1, tak to stejné je.
i[pole]=1.
pole[i] je ítý prvek pole, ne? Tak by měla znít definice. Že je to interně v implementaci převedeno na *(pole+i) by mělo být každému putna respektive do toho by nikomu nemělo být nic. A nezávisle na tom na co se to interně převede by němělo jít napsat i[pole] protože to je prostě sémantický nesmysl...
hranaté závorky jsou jen a pouze syntaktická zkratkaS tím souhlasím, i když je to zkratka jen pro indexování, nikoliv definice což je matoucí věc č.1 (
int[2][3] a int** není totéž; nelze napsat int 3[foo] místo int foo[3])
A matoucí věc č.2 je že syntaktická zkratka foo[3] nemusí a nemá mít za následek syntaktickou zkratku 3[foo].
Pan Occam by vědělCimrman taky... "spočítali jste padlé". V podstatě by se dalo říct, že škoda na uživatelích toho jazyka je neomezeně velká, protože tuhle pitomost se musí každý učit. Na druhou stranu je jen malé množství překladačů, kde by bylo třeba řešit aby to nebyla pitomost.
Naprostá většina uživatelů Céčka o tom nikdy nepřemýšlela a hranaté závorky nepoužila jiným než intuitivním způsobem.Což je docela dobrý důvod proč by tam ta další "feature" *neměla* být.
Kde jste vzal nějakou škodu?Já nikde... to byl Váš dotaz. Abychom nemluvili o dvou různých věcech - pro mne je zrovna *tahle* feature dost nezajímavá, respektive chápu důvody jejího vzniku. Spíš mě to štve jako instance neustále opakujícího se principu který jsem naznačil v 1. příspěvku.
Což je docela dobrý důvod proč by tam ta další "feature" *neměla* být.Ona to ale není další featura, nýbrž prostý důsledek definice.
Ty důsledky jsou triviální, pouze pohled, který jste si na ně zvolil Vy, je zbytečně složitý.Já si nemyslím, že by to bylo o složitosti, ale souhlasím, že máme dva různé úhly pohledu.
Mimochodem, definice libovolného turingovsky úplného programovacího jazyka má nepředstavitelně složité důsledky, počínaje třeba prostou existencí nevyčíslitelných problémů. Proti tomu jsou nějaké syntaktické a sémantické detaily naprosto irelevantní.Nemyslím si, že by míra složitosti měla být záminkou pro "držet hubu a krok"