[OT]C CO tim chtel basnik rici?
Admin HWnews
hwnews na cncnet.info
Středa Prosinec 31 11:17:28 CET 2014
Chce se mi zvracet...to je teda neskutecnej hnus. Opet se presvedcuju,
ze cokoli co zavani *C* syntaxi mi nesmi na oci. 22 let jsem bez toho
vydrzel a doufam, ze jeste jednou tak dlouho vydrzim.
Opravdu zlatej Pascal - nechapu nekoho, ze argumentuje tim, ze je
uzvanenej a rozvlacnej - C je sice usporne, ale pak si to clovej
vynahradi v komentovani kodu a v diskuzich na netu co vlastne by to
mohlo delat.
Nastesti i DB se zatim drzi toho, ze polozka 0 neni to same co null.
RV
Dne 31.12.2014 v 10:24 Jan Waclawek napsal(a):
>>> NULL je ve vět±inou (ne-li vµdy) definován jako 0 nebo (void*)0 takµe
>>> vět±ina programátorů bere NULL a 0 jako synonymum
>>
>> to jako kde jste k tomuhle prisel? obecne to rozhodne neplati - pak je
>> jaksi zbytecne mit 0 a null
>>
>
>
> To si mylis so stavom zo skutocnych programovacich jazykov, pravdepodobne z
> Pascalu. Tam ano, nil je specialna konstanta netypovaneho smernika
> (pointer) u ktoreho je zarucene, ze sa nerovna ziadnemu inemu smerniku; to
> je vsetko (ISO/IEC 7185:1990 6.4.4). Vobec, u skutocnych programovacich
> jazykov je zbytocne spekulovat o *hodnote* smernika, to je interna
> zalezitost prekladaca a programatora do toho nic nie je.
>
> C naproti tomu vznikol ad-hoc bastlenim, a bol len dodatocne kodifikovany,
> takze hodnoty pointrov su tradicne pokladane priamo za adresy ukazovanych
> objektov; dalej 0 a NULL su v C tradicne ekvivalentne (pozor, NULL nie
> null, lebo C je case sensitive). Tipujem, ze u PDP-11 je na adrese 0
> nejaky reset vektor alebo nieco podobne, na ktore nikdy nenastane problem
> ukazovat, takze to bolo pre Thomsona a Ritchieho dost dobre ako unikatny
> pointer co sa nerovna ziadnemu inemu; no a uz to tak zostalo, bez ohladu
> na problemy ktore to prinasa. Neskorsie "normovanie" z toho potom robi
> takuto splet:
>
>
> C99, 6.3.2.3#3
> An integer constant expression with the value 0, or such an expression cast
> to type
> void *, is called a null pointer constant.(55)
>
> (55) The macro NULL is defined in <stddef.h> (and other headers) as a null
> pointer constant; see 7.17.
>
> If a null pointer constant is converted to a
> pointer type, the resulting pointer, called a null pointer, is guaranteed
> to compare unequal
> to a pointer to any object or function.
>
> #4
> Conversion of a null pointer to another pointer type yields a null pointer
> of that type.
> Any two null pointers shall compare equal.
>
>
> To pouzitie v if () je komplikovanejsie: C99, 6.8.4.1#2:
> In both forms [if() aj if()else], the first substatement is executed if the
> expression compares unequal to 0.
>
> pre "compares unequal" musime siahnut po 6.5.9 Equality operators:
> #5
> Otherwise, at least one operand is a pointer. If one operand is a pointer
> and the other is a
> null pointer constant, the null pointer constant is converted to the type
> of the pointer.
>
>
> Takze ta 0 pre implicitne porovnanie z 6.8.4.1#2 je podla prvej casti prvej
> vety z 6.3.2.3#3 "null pointer constant", ktora je potom podla 6.5.9#5
> implicitne pretypovana na pointer takeho typu ako je "operand" v tom if(),
> tym z implicitnej nuly podla 6.3.2.3#4 vznikne null pointer, pre ktory je
> podla druhej vety z 6.3.2.3#3 zarucene, ze sa nerovna ziadnemu skutocnemu
> pointru; sucasne podla 6.3.2.3#4 je zarucene, ze sa bude rovnat
> akemukolvek nulovemu pointru, ktorym je aj makro NULL podla footnotu
> (55)...
>
> wek
>
>
>
>
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
Daląí informace o konferenci Hw-list