[rosedu-general] [techblog] Undefined & unspecified behaviour in C

Adrian Scoica adrian.scoica at gmail.com
Sat Jul 28 02:03:14 EEST 2012


2012/7/28 Adrian Scoica <adrian.scoica at gmail.com>:
> 2012/7/28 Mihai Maruseac <mihai.maruseac at gmail.com>:
>> 2012/7/28 Alexandru Juncu <alexj at rosedu.org>:
>>>> https://github.com/rosedu/techblog/commit/701f08b96323bdb7e55f5e31c8c0af7cfed37296
>>>> https://github.com/rosedu/techblog/blob/master/_posts/2012-07-29-weird-fact-in-c.md
>>>
>>> You are kidding, right? Nu există un site randat cu propuneri?
>> Nop, s-a modificat asta cam acum o lună. Se builduiește local sau se
>> vede pe github :)
>
> Meh, presupun ca nu conteaza, nu moare nimeni sa faca review la cod
> sursa, desi... recunosc ca imi taie considerabil din rabdare.
>
> Revenind la chestii mai utile, am cateva propuneri:
>
> 1. Nu stiu daca intra la capitolul asta sau nu, dar GCC trateaza
> artimetica pe void* ca si cum ar fi pe char*, ceea ce e o extensie de
> compilator.
>
> 2. Overflow-ul intregilor cu semn. (De obicei, MAXINT + 1 face MININT,
> dar nu e specificat in standard ca ar trebui sa se intample asa).
>
> Daca esti dispus sa intri si in C++, mai am doua dragute:
>
> 1. Ordinea de invocare a contructorilor globali.
> // spatiul global
> A a;
> B b;
>
> Unde ambii constructori fac apeleaza fix inc() si dec() din exemplul tau.
>
> 2. (asta e interesant, mai ales pentru ca in C99 e bine definit) *NULL
> e nedefinit. Nu se garanteaza Segmentation Fault.

Pentru ca mi-a atras cineva atentia, vreau sa clarific ce am vrut sa
zic, si anume:
int* p = NULL;
int& q = *p;
In _acest_ caz, comportamentul este nedefinit.


More information about the rosedu-general mailing list