Re[2]: Самый странный код
От: Ops Россия  
Дата: 24.01.12 16:35
Оценка:
Здравствуйте, opener, Вы писали:

O>А кто может объяснить что это за хрень:


O>
O>??=
O>??<
O>??>
O>


O>Никогда такого не видел.



Google: триграф
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[2]: Самый странный код
От: Banned by IT  
Дата: 24.01.12 17:38
Оценка: :)))
Здравствуйте, opener, Вы писали:

O>А кто может объяснить что это за хрень:


O>
O>??=
O>??<
O>??>
O>


O>Никогда такого не видел.


Эта панимаш тяжкое наследие царского режиму: http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D1%80%D0%B0%D1%84_%28%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8_C%D0%B8%29
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: Самый странный код
От: Masterkent  
Дата: 24.01.12 18:12
Оценка:
Banned by IT:

O>>А кто может объяснить что это за хрень:


O>>
O>>??=
O>>??<
O>>??>
O>>


O>>Никогда такого не видел.


BBI>Эта панимаш тяжкое наследие царского режиму: http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D1%80%D0%B0%D1%84_%28%D1%8F%D0%B7%D1%8B%D0%BA%D0%B8_C%D0%B8%29


Кстати, было время, когда триграфы в C++ хотели сделать deprecated, но потом передумали:
Issue 789. Deprecating trigraphs
Re: Самый странный код
От: MasterZiv СССР  
Дата: 24.01.12 18:18
Оценка:
Расскажу я вам историю о страшном-странном коде.

В одном чёрном-чёрном городе был чёрный чёрный университет.
В этом чёрном-чёрном университете был чёрный-чёрный корпус...

ну и так далее.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Самый странный код
От: YourLastSong  
Дата: 24.01.12 18:37
Оценка:
O>Известная прожка, печатает стихи.

Спасибо.

А где-нибудь есть объяснение? Некоторые моменты просто не могу понять никак.
Re[4]: Самый странный код
От: Banned by IT  
Дата: 24.01.12 21:06
Оценка: 1 (1) +3
Здравствуйте, Masterkent, Вы писали:

M>Кстати, было время, когда триграфы в C++ хотели сделать deprecated, но потом передумали:

M>Issue 789. Deprecating trigraphs

Зря передумали ИМХО.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[2]: Самый странный код
От: YourLastSong  
Дата: 24.01.12 21:39
Оценка:
O>
O>main (int t, int _, char *a)


А почему аргументов три, при этом по стандарту требуется либо void, либо два?
Re: Самый странный код
От: Sir-G  
Дата: 25.01.12 04:10
Оценка:
Здравствуйте, YourLastSong, Вы писали:

Начнем с классики. Программа, написанная Диком Т. Винтером (Dik T. Winter at CWI) на Си всего 160-ю символами, но вычисляющая 800 знаков Пи.


int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f*a, f=d%--g,d/=g--,--b;d*=b);}
Re[6]: Самый странный код
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 25.01.12 05:53
Оценка:
Здравствуйте, igna, Вы писали:

W>>Ни зачем, им так больше нравится, для однообразия с sizeof и тд


I>Для однообразия с sizeof нечего применять скобки и с sizeof тоже


А я вот совершенно случайно (и относительно недавно) обнаружил что с sizeof можно не юзать скобки

Сказал "нунадаже!" и все равно продолжил их юзать.

А в последнее время вообще, даже стараюсь их везде юзать. Типа (a+(b*c)).

--
Но я вот одно понять не могу
int foo(int x) {
  if (x) {
    return (-1);
  }
  else {
    return (0);
  }
}

Нафига тут "else"?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: Самый странный код
От: RonWilson Россия  
Дата: 25.01.12 06:05
Оценка:
Здравствуйте, RonWilson, Вы писали:

RW>Здравствуйте, YourLastSong, Вы писали:


YLS>>Здравствуйте, уважаемые господа.


YLS>>Есть ли у кого-то примеры кода на C/C++, который не кажется очевидным при первом взгляде на него?


RW>немного не в тему, но часто вижу и такое:



int func(void)
{
return 0;
}


зачем тут void?
Re[3]: Самый странный код
От: steep8  
Дата: 25.01.12 07:28
Оценка:
Здравствуйте, RonWilson, Вы писали:


RW>
RW>int func(void)
RW>{
RW>return 0;
RW>}
RW>


RW>зачем тут void?


Остатки C-style ?
Re[4]: Самый странный код
От: RonWilson Россия  
Дата: 25.01.12 07:29
Оценка:
Здравствуйте, steep8, Вы писали:

S>Здравствуйте, RonWilson, Вы писали:



RW>>
RW>>int func(void)
RW>>{
RW>>return 0;
RW>>}
RW>>


RW>>зачем тут void?


S>Остатки C-style ?


может быть, но пишут и сейчас такое
Re[5]: Самый странный код
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 25.01.12 07:49
Оценка:
Здравствуйте, RonWilson, Вы писали:

RW>>>
RW>>>int func(void)
RW>>>{
RW>>>return 0;
RW>>>}
RW>>>


RW>>>зачем тут void?


S>>Остатки C-style ?


RW>может быть, но пишут и сейчас такое


Это остатки C-кодеров
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[6]: Самый странный код
От: RonWilson Россия  
Дата: 25.01.12 09:08
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

S>>>Остатки C-style ?


RW>>может быть, но пишут и сейчас такое


КД>Это остатки C-кодеров


или огарки?
Re: Самый странный код
От: opener  
Дата: 25.01.12 09:29
Оценка:
Здравствуйте, YourLastSong, Вы писали:

YLS>Здравствуйте, уважаемые господа.


YLS>Есть ли у кого-то примеры кода на C/C++, который не кажется очевидным при первом взгляде на него?


YLS>Например, что-то наподобие такого:


Программа, печатающая саму себя.

char *f="char *f=%c%s%c;%c#define Q '%c'%c#define N '%cn'%c#define B '%c%c'%c#include <stdio.h>%cvoid main(){printf(f,Q,f,Q,N,Q,N,B,N,B,B,N,N,N);}%c";
#define Q '"'
#define N '\n'
#define B '\\'
#include <stdio.h>
void main(){printf(f,Q,f,Q,N,Q,N,B,N,B,B,N,N,N);}
Re[3]: Самый странный код
От: Privalov  
Дата: 25.01.12 10:50
Оценка:
Здравствуйте, YourLastSong, Вы писали:

O>>
O>main (int t, int _, char *a)


YLS>А почему аргументов три, при этом по стандарту требуется либо void, либо два?


MSDN объясняет.

А согласно Вики, можно и больше (иногда). Вики ссылается сюда.

// Compile with: gcc -o apple apple.c
#include <stdio.h>
int main(int argc, char *argv[], char *envp[], char *apple[]) {  
    printf("argv[0] = %s\n", argv[0]);  
    printf("apple[0] = %s\n", apple[0]);  
    return 0;
}


Такого я в реальном коде не видел.
Re[2]: Самый странный код
От: johny5 Новая Зеландия
Дата: 25.01.12 10:58
Оценка:
PD>http://rsdn.ru/forum/philosophy/2445064.1.aspx
Автор: Pavel Dvorkin
Дата: 12.04.07



#include <stdio.h>
#include <stdlib.h>

int v,w,Y= -1,W,J,p,F,o=9999,M,N,K,X,YY,_,P[9999],s();
typedef int(*L)();
L q[9999];

tj()
{
    int S=(v<0?-1:!!v)+((w<0?-1:!!w)<<K);
    if(!S)return J;
    for(v=W+S;
        v!=J&&!q[v];
        v+=S);
    return v;
}

k()
{
    _=K;
    return v?(v<0?-v:v)>1||w-Y||!q[J]:(w-Y&&(w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/ 2))||q[J];
}

z()
{
    _=5;
    return v*w||tj()-J;
}

e()
{
    _= -2;
    return(v*v*v-v||w*w*w-w)&&(J-W-2||(W&N)-4||(W>>K!=(Y-1?N:0))|| q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*Y<0);
}

double VR()
{
    int PZ=0x7fff;
    return(double)(rand()&PZ)/(double)PZ;
}

l()
{
    _=K+1;
    return(v*w&&(v<0?-v:v)-(w<0?-w:w))||tj()-J;
}

double UC()
{
    double i=0, d;

    while((i+=d=VR())<1.0)
        ;

    return d;
}

c()
{
    _= -11;
    return (v<0?-v:v)-(w<0?-w:w)||tj()-J;
}

I(ur,n,x)
{
    W=ur;
    J=n;
    if(P[W]!=Y||P[J]==Y)
        return J+1;

    v=(J&N)-(W&N);
    w=(J>>K)-(W>>K);

    return q[W]()||(x&&QL(W,J,s));
}

TT(W)
{
    v=w=0;
    return q[W]()+K;
}

s()
{
    int j= -1,i;
    Y= -Y;

    for(i=0; i<M; ++i)
    {
        if(j<0&&P[i]== -Y&&TT(i)&&_== -2)
        {
            j=i;
            i= -1;
        }
        else if(j>=0&&!I(i,j,0))
            return Y= -Y;
    }

    return!(Y= -Y);
}

bb()
{
    _=1;
    return (v*w<0?-v*w:v*w)-2;
}
uv()
{

    for(v=0;
        v<9999;
        ++v)
    {
        if(((v>>K)<=K?v>>K:N-(v>>K))==0)
        {
            int S=((v&N)<=K?v&N:N-(v&N));

            q[v]=!S?z:(S==1?bb:(S==2?c:(v&N>K?l:e)));
        }
        else if(((v>>K)<=K?v>>K:N-(v>>K))==1)q[v]=k;
        else q[v]=0;

        P[v]=!!q[v]*(28-v);
    }
}
y()
{
    int G=Y,i;
    J=0;
    for(i=0;i<M;++i)
    {

        i%8||printf("\n%4o ",i);
        if((Y=P[i]=(P[i]<0?-1:!!P[i]))&& TT(i))printf("%c ",_+93+Y*16);
        else printf("- ");
    }

    printf("\n    ");
    do printf("%2d",i++&N);
    while(i&N);
    Y=G;
    printf("\n");
}
O(W,J)
{

    if((q[J]=q[W])==k&&((J>>K)<=K?J>>K:N-(J>>K))==0)q[J]=l;
    if(q[W]==e)if(J-W==2)O(J+1,J-1);
    else
        if(W-J==2)O(W-1,W+1);
    P[J]=P[W];
    q[W]=0;
    P[W]=0;
}
QL(W,J,D)L D;

{
    int
        HQ=P[J],YX;
    L AJ=q[J],XY=q[W];
    O(W,J);
    YX=D();
    O(J,W);
    q[J]=AJ;
    q[W]=XY;

    P[J]=HQ;
    return YX;
}
C()
{
    int i,j,BZ=0;
    for(i=0;i<M;++i)
    {
        L Z=q[i];
        if(Z)
        {
            int
                r=((i>>K)<=K?i>>K:N-(i>>K))+((i&N)<=K?i&N:N-(i&N)),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]<0?N-(i>>K):(i>>K)):
                (Z==l?124-((YY<8&&((i&N)!=K|| (i>>K)!=(P[i]>0?0:N)))?M:0):
                (Z==c?41+r:(Z==e?9999-r-r:36+r+r))));
            Y=P[i];
            for(j=0;
                j<M;

                ++j)if(!I(i,j,0))S+=(P[j]?5:1);
            BZ+=G==Y?S:-S;
            Y=G;
        }
    }

    if(!(++X&M-1))write(1,".",1);
    return BZ;
}
PX()
{
    int i,Q=0,XP=0,JZ=M*M,E= -9999,t,S=o;

    if(!F--)return++F+C();
    for(i=0; i<JZ; ++i)
        if(!I(i>>K+K,i&M-1,1))
        {
            Y= -Y;
            o= -E;
            t=
                -QL(i>>K+K,i&M-1,PX);
            Y= -Y;
            if(t>E)
            {
                ++XP;
                Q=i;
                E=t;
                if(E>=S) return++F,E;
            }
        }

        if(!XP)E=s()?-9999+1:0;
        p=Q;
        return++F,E;
}
RZ()
{
    int i,j,T=0;
    for(;
        ;
        )
    {
        y();
        o=9999;
        do
        {

            printf("\n%d %d %d %s ",X,T,C(),s()?"!":">");
            fflush((&__iob_func()[1]));
        }

        while(scanf("%o%o",&i,&j)!=2||I(i,j,1));
        O(i,j);
        y();
        X=0;
        ++YY;
        Y= -Y;
        T=PX();

        i=p>>(K<<1);
        j=p&(M-1);
        if(I(i,j,1))
        {
            printf("Rats!\n");
            return;
        }
        O(i,j);
        Y= -Y;

        if(T>M*M)printf("\nHar har.\n");
    }
}

main(ac,av)char**av;
{
    long time(),j=time(&j);

    double i=0;
    srand((int)j);
    for(M=0; M<=9999; ++M)
        i+=UC();
    M=i/100;
    if(M&3)++M;
    if(M&1)--M;

    for(N=1; N*N<M; ++N)
        ;

    K= --N/2;
    F=ac>1?atoi(av[1]):2;
    uv();
    RZ();
}


Кто дальше?
Re[2]: Самый странный код
От: Sir-G  
Дата: 25.01.12 11:04
Оценка:
Здравствуйте, opener, Вы писали:

O>Программа, печатающая саму себя.

Программы, выводящие свой исходный код называются куайны:
http://en.wikipedia.org/wiki/Quine_(computing)

По ссылке на Вики еще есть интересная вещь, когда программа на C++ печатает программу на Java, которая потом печатает снова тот же C++ код. Есть и более длинные циклы по языкам.
Re: Самый странный код
От: Sir-G  
Дата: 25.01.12 11:06
Оценка: 1 (1) :)
Здравствуйте, YourLastSong, Вы писали:

YLS>Есть ли у кого-то примеры кода на C/C++, который не кажется очевидным при первом взгляде на него?

В стандарте C++11 появились лямбда-выражения, например
[] (int x) { std::cout << x << std::endl; } (5);

Следующий код успешно компилируется в 10-ой студии:
[](){}();[]{[]{}();}();
Re[7]: Самый странный код
От: B0FEE664  
Дата: 25.01.12 11:18
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>--

КД>Но я вот одно понять не могу
КД>
КД>int foo(int x) {
КД>  if (x) {
КД>    return (-1);
КД>  }
КД>  else {
КД>    return (0);
КД>  }
КД>}
КД>

КД>Нафига тут "else"?

И зачем тут if? :

int foo(int x) {  return x ? -1 : 0; }
И каждый день — без права на ошибку...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.