- 1
- 2
- 3
- 4
- 5
string* newstr()
{
string* str;
return memset(str=malloc(sizeof(string)), 0, str?sizeof(string):0);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+92.9
string* newstr()
{
string* str;
return memset(str=malloc(sizeof(string)), 0, str?sizeof(string):0);
}
string* append(string* dest, string const* src)
{
src->size?
memcpy((char*)(dest->str=realloc(dest->str,dest->size+src->size+1))+dest->size,src->str,dest->str?src->size+1:0),
dest->size+=(dest->str?src->size:-dest->size):0;
return dest;
}
string* append(string* dest, string const* src)
{
char* realloc_ret;
src->size?
realloc_ret=realloc(dest->str,dest->size+src->size+1),
memcpy(realloc_ret+dest->size,src->str,realloc_ret?src->size+1:(free(dest->str),0)),
dest->str=realloc_ret,
dest->size+=(realloc_ret?src->size:-dest->size):0;
return dest;
}
int i=5; myfunc(a,++a);
не гарантируется что это будет аналогично myfunc(5,6) - компилятор может как бы сначала вычислить второй, и вызовется myfunc(6,6).
Именно это называется кодом с побочными эффектами. Он зависит от компилятора, поэтому стал непереносимым.
Побочный эффект - любое изменение объекта непрописанное в контракте (возможно и неявном) метода.
А этот код зависит от компилятора, только потому, что спецификация/стандарт С++ о таких случаях молчит
на чистом инглише написано undefined behavior
А string здесь что? Указатель на char?
for (i =0; i < sizeof(strptr); i++)
:) так что нечему удивляться. такое сообразил выпускник Киевского Национального Университета факультета кибернетика... к чему образование катится...