实在是受不了C的某些标准,你说呢

yqj2065 2013-06-06 11:04:34
拜读飞天御剑流的左值性博文,偶实在是受不了C标准中的这些东西。【注:我认为飞天御剑流的文章是很有意义的,我仅仅是说受不了C标准】

当我们把一个小学生的文章作为范本,要求大家都按照他的风格写作文,并为该小学生的文章制订标准,可以想象是多么蛋疼的事情。【比喻,勿喷】
如果把C所有的语法元素全部还在桌面上,将能够作为左值的东西还在一起(还要知道不能够作为左值的东西),从中抽象出左值概念,就得到C标准的lvalue。问题是,作为左值的东西中,有一些无聊的东西。
int *p;
*p=5;
"p虽然没有指向一个有效对象,但这里的*p显然仍是一个左值,C89的定义排除了这种情况,不太合理,这个失误在C99中得到了修正,C99不再规定左值必须指示一个有效对象",这里就是一个无聊的东西。
标准(编译器的级别还不够)就应该要求局部变量必须被初始化。一个不知道指向哪里的p,怎么能够允许它随随便便地解引用。关键是,c89和c99还在这种无聊的问题上摇摇摆摆,实在是令人难受。
...全文
699 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
yqj2065 2013-06-08
  • 打赏
  • 举报
回复
不散分的淫不是好淫。 要学会散分。
yqj2065 2013-06-08
  • 打赏
  • 举报
回复
为什么该程序要在最上面加上一根天线,不好看..
赵4老师 2013-06-08
  • 打赏
  • 举报
回复
引用 51 楼 zaixiankaifa 的回复:
[quote=引用 50 楼 yqj2065 的回复:] 不知道C语言中著名的技巧:if(5==x) 的C程序员, 要么是极其细心的人,要么是神经极粗壮的人。 随便鄙视一下zhao4zhong1,“可用分:21753”,怎么这么会过日子。
zhao4zhong1就天天在在灌水[/quote] 水也分很多种: 自来水 蒸馏水 矿泉水 刷锅水 中水 ……
赵4老师 2013-06-08
  • 打赏
  • 举报
回复
字体小点更好看:
                                       /*
                                      +
                                     +
                                    +
                                    +
                                    [         >i>n[t
                                     */   #include<stdio.h>
                        /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1;
                     */int/**/main(int/**/n,char**m){FILE*p,*q;int        A,k,a,r,i/*
                   #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%"   "d\n%d\40%d"/**/
                 "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**"
          "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*="
       "yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?"
      "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/**
     */"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2"
     ":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[
     i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1]  !='\0'))?fopen(m[1],y+298):stdin;
      /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m]    =<2<5<64;}-]-(m+;yry[rm*])/[*
       */q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{     }[*/:fopen(m[2],d+14);if(!p||/*
       "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++"  <)<      ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)
    return+printf("Can "  "not\x20open\40%s\40"    ""       "for\40%sing\n",m[!p?1:2],!p?/*
  o=82]5<<+(+3+1+&.(+  m  +-+1.)<)<|<|.6>4>-+(>    m-        &-1.9-2-)-|-|.28>-w-?-m.:>([28+
 */"read":"writ");for  (   a=k=u= 0;y[u];  u=2    +u){y[k++   ]=y[u];}if((a=fread(b,1,1024/*
,mY/R*Y"R*/,p/*U*/)/*          R*/ )>/*U{  */   2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\}
*/sscanf(b,d,&k,& A,&           i,  &r)&&        !   (k-6&&k -5)&&r==255){u=A;if(n>3){/*
]&<1<6<?<m.-+1>3> +:+ .1>3+++     .   -m-)      -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/
u++;i++;}fprintf   (q,    d,k,           u      >>1,i>>1,r);u  = k-5?8:4;k=3;}else
  /*]>*/{(u)=/*{   p> >u  >t>-]s                >++(.yryr*/+(    n+14>17)?8/4:8*5/
     4;}for(r=i=0  ;  ;){u*=6;u+=                (n>3?1:0);if    (y[u]&01)fputc(/*
      <g-e<t.c>h.a r  -(-).)8+<1.                 >;+i.(<)<     <)+{+i.f>([180*/1*
      (r),q);if(y[u   ]&16)k=A;if                               (y[u]&2)k--;if(i/*
      ("^w^NAMORI; {   I*/==a/*"                               )*/){/**/i=a=(u)*11
       &255;if(1&&0>=     (a=                                 fread(b,1,1024,p))&&
        ")]i>(w)-;} {                                         /i-f-(-m--M1-0.)<{"
         [ 8]==59/* */                                       )break;i=0;}r=b[i++]
            ;u+=(/**>>                                     *..</<<<)<[[;]**/+8&*
            (y+u))?(10-              r?4:2):(y[u]         &4)?(k?2:4):2;u=y[u/*
             49;7i\(w)/;}             y}ru\=*ri[        ,mc]o;n}trientuu ren (
             */]-(int)'`';}             fclose(          p);k= +fclose( q);
              /*] <*.na/m*o{ri{                       d;^w^;}  }^_^}}
               "   */   return  k-                -1+   /*\'   '-`*/
                     (   -/*}/   */0x01        );       {;{    }}
                            ;           /*^w^*/        ;}
nadleeh 2013-06-08
  • 打赏
  • 举报
回复
引用 楼主 yqj2065 的回复:
拜读飞天御剑流的左值性博文,偶实在是受不了C标准中的这些东西。【注:我认为飞天御剑流的文章是很有意义的,我仅仅是说受不了C标准】 当我们把一个小学生的文章作为范本,要求大家都按照他的风格写作文,并为该小学生的文章制订标准,可以想象是多么蛋疼的事情。【比喻,勿喷】 如果把C所有的语法元素全部还在桌面上,将能够作为左值的东西还在一起(还要知道不能够作为左值的东西),从中抽象出左值概念,就得到C标准的lvalue。问题是,作为左值的东西中,有一些无聊的东西。 int *p; *p=5; "p虽然没有指向一个有效对象,但这里的*p显然仍是一个左值,C89的定义排除了这种情况,不太合理,这个失误在C99中得到了修正,C99不再规定左值必须指示一个有效对象",这里就是一个无聊的东西。 标准(编译器的级别还不够)就应该要求局部变量必须被初始化。一个不知道指向哪里的p,怎么能够允许它随随便便地解引用。关键是,c89和c99还在这种无聊的问题上摇摇摆摆,实在是令人难受。
这种问题本来就应环境而应, 所有的局部变量都应被初始化,初始化也是要耗cpu 的,不初始化可能有隐患,但不一定有,这个是矛盾体. int *p; *p = 5;这种玩意儿懂的人都不可能这么写,别指望编译器给你擦太多屁股.
赵4老师 2013-06-08
  • 打赏
  • 举报
回复
不带语法高亮更好看:(远离屏幕眯着眼看还能看出更多细节)
                                       /*
                                      +
                                     +
                                    +
                                    +
                                    [         >i>n[t
                                     */   #include<stdio.h>
                        /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1;
                     */int/**/main(int/**/n,char**m){FILE*p,*q;int        A,k,a,r,i/*
                   #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%"   "d\n%d\40%d"/**/
                 "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**"
          "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*="
       "yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?"
      "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/**
     */"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2"
     ":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[
     i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1]  !='\0'))?fopen(m[1],y+298):stdin;
      /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m]    =<2<5<64;}-]-(m+;yry[rm*])/[*
       */q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{     }[*/:fopen(m[2],d+14);if(!p||/*
       "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++"  <)<      ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)
    return+printf("Can "  "not\x20open\40%s\40"    ""       "for\40%sing\n",m[!p?1:2],!p?/*
  o=82]5<<+(+3+1+&.(+  m  +-+1.)<)<|<|.6>4>-+(>    m-        &-1.9-2-)-|-|.28>-w-?-m.:>([28+
 */"read":"writ");for  (   a=k=u= 0;y[u];  u=2    +u){y[k++   ]=y[u];}if((a=fread(b,1,1024/*
,mY/R*Y"R*/,p/*U*/)/*          R*/ )>/*U{  */   2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\}
*/sscanf(b,d,&k,& A,&           i,  &r)&&        !   (k-6&&k -5)&&r==255){u=A;if(n>3){/*
]&<1<6<?<m.-+1>3> +:+ .1>3+++     .   -m-)      -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/
u++;i++;}fprintf   (q,    d,k,           u      >>1,i>>1,r);u  = k-5?8:4;k=3;}else
  /*]>*/{(u)=/*{   p> >u  >t>-]s                >++(.yryr*/+(    n+14>17)?8/4:8*5/
     4;}for(r=i=0  ;  ;){u*=6;u+=                (n>3?1:0);if    (y[u]&01)fputc(/*
      <g-e<t.c>h.a r  -(-).)8+<1.                 >;+i.(<)<     <)+{+i.f>([180*/1*
      (r),q);if(y[u   ]&16)k=A;if                               (y[u]&2)k--;if(i/*
      ("^w^NAMORI; {   I*/==a/*"                               )*/){/**/i=a=(u)*11
       &255;if(1&&0>=     (a=                                 fread(b,1,1024,p))&&
        ")]i>(w)-;} {                                         /i-f-(-m--M1-0.)<{"
         [ 8]==59/* */                                       )break;i=0;}r=b[i++]
            ;u+=(/**>>                                     *..</<<<)<[[;]**/+8&*
            (y+u))?(10-              r?4:2):(y[u]         &4)?(k?2:4):2;u=y[u/*
             49;7i\(w)/;}             y}ru\=*ri[        ,mc]o;n}trientuu ren (
             */]-(int)'`';}             fclose(          p);k= +fclose( q);
              /*] <*.na/m*o{ri{                       d;^w^;}  }^_^}}
               "   */   return  k-                -1+   /*\'   '-`*/
                     (   -/*}/   */0x01        );       {;{    }}
                            ;           /*^w^*/        ;}
ForestDB 2013-06-07
  • 打赏
  • 举报
回复
LZ是要写编译器么? 语言是拿来用的(比如写作文)
zaixiankaifa 2013-06-07
  • 打赏
  • 举报
回复
引用 50 楼 yqj2065 的回复:
不知道C语言中著名的技巧:if(5==x) 的C程序员, 要么是极其细心的人,要么是神经极粗壮的人。 随便鄙视一下zhao4zhong1,“可用分:21753”,怎么这么会过日子。
zhao4zhong1就天天在在灌水
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
不知道C语言中著名的技巧:if(5==x) 的C程序员, 要么是极其细心的人,要么是神经极粗壮的人。 随便鄙视一下zhao4zhong1,“可用分:21753”,怎么这么会过日子。
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
引用 48 楼 mingliang1212 的回复:
这个东西充其量也就是 == 这个操作符设计得不完美.跟副作用一点关系都没有. 反正我是从来没有用错过. == 和 = 看起来差了这么多. 你还不如去吐槽<和>, 这两个键位又接近,看起来相似得很.
《C专家编程》将x == 5;称为“价值2000万美元的bug”。 吐槽C的书多得去了。说到操作符设计得不完美,也是指=,从:=改过来,存在争议。 我想讨论一下如何静下心来看标准,谁关心程序员的误用。
iamnobody 2013-06-07
  • 打赏
  • 举报
回复
引用 46 楼 yqj2065 的回复:
x == 5 这样的语句, 直接催生了C语言中著名的技巧: if(5==x)
这个东西充其量也就是 == 这个操作符设计得不完美.跟副作用一点关系都没有. 反正我是从来没有用错过. == 和 = 看起来差了这么多. 你还不如去吐槽<和>, 这两个键位又接近,看起来相似得很.
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
引用 44 楼 zhao4zhong1 的回复:
刚上传的。 这次CSDN的效率出奇地高啊! C语言怪异代码大赛历届作品大全 1984~1996,1998,2000,2001,2004~2006,2011,2012 http://download.csdn.net/detail/zhao4zhong1/5538847
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
x == 5 这样的语句, 直接催生了C语言中著名的技巧: if(5==x)
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
引用 43 楼 mingliang1212 的回复:
[quote=引用 41 楼 yqj2065 的回复:] [quote=引用 30 楼 mingliang1212 的回复:] x == 5 这样的语句,标准有规定,这样的语句可以写,但是...
我的意思是标准应该规定,这样的语句可以写!什么断章取义[/quote] 为什么说是断章取义呢,因为我相信看过语句,表达式那部分内容的人都会认为没有理由禁止写这样的代码. C语言之父,还有很多其他大牛,还有我,都是这么认为的.[/quote] 39楼的说明,你看看。 看过那本书的都应该记得这个例子。
赵4老师 2013-06-07
  • 打赏
  • 举报
回复
刚上传的。 这次CSDN的效率出奇地高啊! C语言怪异代码大赛历届作品大全 1984~1996,1998,2000,2001,2004~2006,2011,2012 http://download.csdn.net/detail/zhao4zhong1/5538847
iamnobody 2013-06-07
  • 打赏
  • 举报
回复
引用 41 楼 yqj2065 的回复:
[quote=引用 30 楼 mingliang1212 的回复:] x == 5 这样的语句,标准有规定,这样的语句可以写,但是...
我的意思是标准应该规定,这样的语句可以写!什么断章取义[/quote] 为什么说是断章取义呢,因为我相信看过语句,表达式那部分内容的人都会认为没有理由禁止写这样的代码. C语言之父,还有很多其他大牛,还有我,都是这么认为的.
赵4老师 2013-06-07
  • 打赏
  • 举报
回复
引用 40 楼 yqj2065 的回复:
[quote=引用 38 楼 zhao4zhong1 的回复:] http://bbs.csdn.net/topics/380157851
C的早期有这样的国际大赛,为最蛋疼的风格颁奖。[/quote] 搜“C怪异代码大赛” 1984~1996 1998 2000 2001 2004~2006 2011 2012 怪异代码大赛冠军作品\2011\akari\akari.c
                                       /*
                                      +
                                     +
                                    +
                                    +
                                    [         >i>n[t
                                     */   #include<stdio.h>
                        /*2w0,1m2,]_<n+a m+o>r>i>=>(['0n1'0)1;
                     */int/**/main(int/**/n,char**m){FILE*p,*q;int        A,k,a,r,i/*
                   #uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d="P%"   "d\n%d\40%d"/**/
                 "\n%d\n\00wb+",b[1024],y[]="yuriyurarararayuruyuri*daijiken**akkari~n**"
          "/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*="
       "yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?"
      "*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni("/**
     */"i+k[>+b+i>++b++>l[rb";int/**/u;for(i=0;i<101;i++)y[i*2]^="~hktrvg~dmG*eoa+%squ#l2"
     ":(wn\"1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju {stkjalor(stwvne\"gt\"yogYURUYURI"[
     i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1]  !='\0'))?fopen(m[1],y+298):stdin;
      /*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m]    =<2<5<64;}-]-(m+;yry[rm*])/[*
       */q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout /*]{     }[*/:fopen(m[2],d+14);if(!p||/*
       "]<<*-]>y++>u>>+r >+u+++y>--u---r>++i+++"  <)<      ;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)
    return+printf("Can "  "not\x20open\40%s\40"    ""       "for\40%sing\n",m[!p?1:2],!p?/*
  o=82]5<<+(+3+1+&.(+  m  +-+1.)<)<|<|.6>4>-+(>    m-        &-1.9-2-)-|-|.28>-w-?-m.:>([28+
 */"read":"writ");for  (   a=k=u= 0;y[u];  u=2    +u){y[k++   ]=y[u];}if((a=fread(b,1,1024/*
,mY/R*Y"R*/,p/*U*/)/*          R*/ )>/*U{  */   2&& b/*Y*/[0]/*U*/=='P' &&4==/*"y*r/y)r\}
*/sscanf(b,d,&k,& A,&           i,  &r)&&        !   (k-6&&k -5)&&r==255){u=A;if(n>3){/*
]&<1<6<?<m.-+1>3> +:+ .1>3+++     .   -m-)      -;.u+=++.1<0< <; f<o<r<(.;<([m(=)/8*/
u++;i++;}fprintf   (q,    d,k,           u      >>1,i>>1,r);u  = k-5?8:4;k=3;}else
  /*]>*/{(u)=/*{   p> >u  >t>-]s                >++(.yryr*/+(    n+14>17)?8/4:8*5/
     4;}for(r=i=0  ;  ;){u*=6;u+=                (n>3?1:0);if    (y[u]&01)fputc(/*
      <g-e<t.c>h.a r  -(-).)8+<1.                 >;+i.(<)<     <)+{+i.f>([180*/1*
      (r),q);if(y[u   ]&16)k=A;if                               (y[u]&2)k--;if(i/*
      ("^w^NAMORI; {   I*/==a/*"                               )*/){/**/i=a=(u)*11
       &255;if(1&&0>=     (a=                                 fread(b,1,1024,p))&&
        ")]i>(w)-;} {                                         /i-f-(-m--M1-0.)<{"
         [ 8]==59/* */                                       )break;i=0;}r=b[i++]
            ;u+=(/**>>                                     *..</<<<)<[[;]**/+8&*
            (y+u))?(10-              r?4:2):(y[u]         &4)?(k?2:4):2;u=y[u/*
             49;7i\(w)/;}             y}ru\=*ri[        ,mc]o;n}trientuu ren (
             */]-(int)'`';}             fclose(          p);k= +fclose( q);
              /*] <*.na/m*o{ri{                       d;^w^;}  }^_^}}
               "   */   return  k-                -1+   /*\'   '-`*/
                     (   -/*}/   */0x01        );       {;{    }}
                            ;           /*^w^*/        ;}
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
引用 30 楼 mingliang1212 的回复:
x == 5 这样的语句,标准有规定,这样的语句可以写,但是...
我的意思是标准应该规定,这样的语句可以写!什么断章取义
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
引用 38 楼 zhao4zhong1 的回复:
http://bbs.csdn.net/topics/380157851
C的早期有这样的国际大赛,为最蛋疼的风格颁奖。
yqj2065 2013-06-07
  • 打赏
  • 举报
回复
引用 24 楼 qq120848369 的回复:
你开发的时候应该不会遇到这种理论问题。
某经典C书上的例子,绝对不是理论问题。 x==5; 程序员本来的意图是赋值,但是多敲了一个=号。为了查找程序的bug,整个团队花了大量的力气,蛋疼地找到了这个语句。
加载更多回复(37)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧