Portál AbcLinuxu, 4. května 2025 10:20
Hmm, ten patche vypadá hodně usměvně. Bohužel, něčemu podobnému se v C asi zabránit nedá, co?
geteuid
je pointer na funkci, zatímco geteuid()
je volání funkce, což je céčku jedno. Nebo existuje nějaký parser, který by na podobné konstrukce upozornil?
#define ...
, vid...
-Wall
, dokonce mám neblahé tušení, že snad i přímo norma specifikuje, že to musí být přípustné (ale ruku do ohně bych za to nedal, musel bych se podívat). Je to celkem logické, idiomy typu 'if (!p)
' se používají skoro všude. Navíc se i NULL
často #defin
uje jako '0
' místo '((void*) 0)
'.
#ifdef __cplusplus #define NULL 0 #else #define NULL ((void*) 0) #elif
while (curr = next_foo(bar)) baz(curr); while ((curr = next_foo(bar)) != NULL) baz(curr);Stejně nechápu proč vlastně C trvá na závorkách kolem expr v příkazech
if, while, for, switch
, protože jsou obvykle redundantní a pouze snižují čitelnost. Zlatej python.
=
pro přiřazení a ==
pro porovnání: v programech se statisticky výrazně častěji přiřazuje než porovnává na rovnost, proto je pro přiřazení zvolen kratší operátor; na rozdíl od Pascalu, který byl stvořen jako jazyk pro výuku, jehož návrh zohledňuje spíše teoretická hlediska než praktická. Jinak by totiž Wirtha nikdy nemohlo napadnout něco tak šíleného, jako dát operátorům and
a or
vyšší prioritu než porovnávání (a takových příkladů by se v Pascalu našlo víc).
splint
), které leccos najdou.
/* First the options that are only allowed for root */ if (getuid() == 0 || geteuid() != 0)Jo a chybějící function call by mělo gcc v tomto případě hlásit, protože geteuid bez závorek je reference na externí symbol, tudíž je blbost jej castovat na bool.
X
nemusí mít suid bit, pokud ho nepotřebujete spouštět interaktivně pomocí startx
. Což dnes naprostá většina uživatelů nepotřebuje.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.