亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: coco520
打印 上一主題 下一主題

誰知道這個逗號是遵循哪個C的標(biāo)準(zhǔn)? [復(fù)制鏈接]

論壇徽章:
0
11 [報告]
發(fā)表于 2007-06-07 12:47 |只看該作者
原帖由 converse 于 2007-6-7 10:25 發(fā)表
這個問題一點都不復(fù)雜嘛,就是原來你寫:

int i = 1,j = 1;

變成了:

int i = 1,
     j =1;



可是這里并不是變量聲明,而是結(jié)構(gòu)體賦值呀。

編譯可以通過,我想知道是不是C的語法允許的還是ddk的擴展。

論壇徽章:
0
12 [報告]
發(fā)表于 2007-06-07 12:50 |只看該作者
原帖由 coco520 于 2007-6-7 12:47 發(fā)表



可是這里并不是變量聲明,而是結(jié)構(gòu)體賦值呀。

編譯可以通過,我想知道是不是C的語法允許的還是ddk的擴展。


的確,編譯能通過是因為存在逗號表達(dá)式;這語句合法,但在某種意義上是程序員的手誤。

論壇徽章:
0
13 [報告]
發(fā)表于 2007-06-07 13:01 |只看該作者
原帖由 醉臥水云間 于 2007-6-7 12:34 發(fā)表


不合法,除非:
int i=0;
int j=0;


能做進(jìn)一步的解釋嗎?我的理解是:

bid = 1,
forbid = 2;

相當(dāng)于

bid = 1,  forbid = 2;

作為一個表達(dá)式,即所說的逗號表達(dá)式出現(xiàn),它的值為 (forbid = 2),也就是 2

此處的表達(dá)式單獨作為語句 (statement) 出現(xiàn)。

這里的寫法正巧合乎 C 語法。

.

[ 本帖最后由 langue 于 2007-6-7 13:02 編輯 ]

論壇徽章:
0
14 [報告]
發(fā)表于 2007-06-07 13:08 |只看該作者
原帖由 langue 于 2007-6-7 12:50 發(fā)表


的確,編譯能通過是因為存在逗號表達(dá)式;這語句合法,但在某種意義上是程序員的手誤。


為啥langue總要認(rèn)為是"手誤"啊,很多人都這么寫的.

論壇徽章:
0
15 [報告]
發(fā)表于 2007-06-07 13:09 |只看該作者
原帖由 coco520 于 2007-6-7 12:47 發(fā)表



可是這里并不是變量聲明,而是結(jié)構(gòu)體賦值呀。

編譯可以通過,我想知道是不是C的語法允許的還是ddk的擴展。


糾正一下你的理解,我前面給的例子不是聲明是定義,也是變量賦值.

論壇徽章:
0
16 [報告]
發(fā)表于 2007-06-07 13:52 |只看該作者
哦 原來如此 謝謝各位
6.5.17   Comma   operator  
   
  Syntax  
   
  1   expression:  
  assignment-expression  
  expression   ,   assignment-expression  
  Semantics  
   
  2   The   left   operand   of   a   comma   operator   is   evaluated   as   a   void   expression;   there   is   a  
  sequence   point   after   its   evaluation.   Then   the   right   operand   is   evaluated;   the   result   has   its  
  type   and   value.94)   If   an   attempt   is   made   to   modify   the   result   of   a   comma   operator   or   to  
  access   it   after   the   next   sequence   point,   the   behavior   is   undefined.  
   
  3   EXAMPLE   As   indicated   by   the   syntax,   the   comma   operator   (as   described   in   this   subclause)   cannot  
  appear   in   contexts   where   a   comma   is   used   to   separate   items   in   a   list   (such   as   arguments   to   functions   or   lists  
  of   initializers).   On   the   other   hand,   it   can   be   used   within   a   parenthesized   expression   or   within   the   second  
  expression   of   a   conditional   operator   in   such   contexts.   In   the   function   call  
   
  f(a,   (t=3,   t+2),   c)  
   
  the   function   has   three   arguments,   the   second   of   which   has   the   value

論壇徽章:
0
17 [報告]
發(fā)表于 2007-06-07 16:23 |只看該作者

逗號表達(dá)式

逗號表達(dá)式的值等于最后一個表達(dá)式的值;
例:
int i,j,m;
int k=(i=1,j=2,m=3);


此式的計算結(jié)果就是k=3;

論壇徽章:
0
18 [報告]
發(fā)表于 2007-06-07 16:29 |只看該作者
原帖由 langue 于 2007-6-7 12:50 發(fā)表


的確,編譯能通過是因為存在逗號表達(dá)式;這語句合法,但在某種意義上是程序員的手誤。

定義變量的時候用到了逗號不能叫做逗號表達(dá)式吧

論壇徽章:
0
19 [報告]
發(fā)表于 2007-06-07 18:41 |只看該作者
原帖由 jaffaz 于 2007-6-7 16:29 發(fā)表

定義變量的時候用到了逗號不能叫做逗號表達(dá)式吧


K&R2 pp. 209 A7.18

... In contexts where comma is given a special meaning, for example in lists of function arguments and lists of initializers, the required syntactic unit is an assignment expression, so ...


這幾句話從一個側(cè)面表現(xiàn)出,在某些特定的場合下逗號有特殊含義,比如函數(shù)參數(shù)列表、初始化列表等等,這時候需要加上一個括號以便區(qū)別。例如,

f(a, (t=3, t+2), c)

有三個參數(shù),其中第二個的值為 5。

當(dāng)然,在特定場合下逗號才具有特定意義,通常逗號分隔的表達(dá)式對都是從左向右取值的,這就是所謂逗號表達(dá)式。樓主給出的代碼顯然不屬于 “特定的場合”,所以編譯器只能把它理解成逗號表達(dá)式。

.

論壇徽章:
0
20 [報告]
發(fā)表于 2007-06-07 22:23 |只看該作者
逗號語句后面的空白可以是空格,TAB和換行符,這沒什么不對的,哪個準(zhǔn)備都沒有限制這一點
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP