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

Chinaunix

標題: 誰知道這個逗號是遵循哪個C的標準? [打印本頁]

作者: coco520    時間: 2007-06-07 09:55
標題: 誰知道這個逗號是遵循哪個C的標準?
vnifChar.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
vnifChar.Header.Size = sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS);

誰知道這個逗號是遵循哪個C的標準?
作者: lenovo    時間: 2007-06-07 09:59
你指得c標準是c89,c99?
作者: emacsnw    時間: 2007-06-07 10:03
原帖由 coco520 于 2007-6-6 17:55 發(fā)表
vnifChar.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
vnifChar.Header.Size = sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS);

誰知道這個逗號是遵循哪個C的標準?


不就是逗號表達式嗎?
作者: cugb_cat    時間: 2007-06-07 10:23
原帖由 coco520 于 2007-6-7 09:55 發(fā)表
vnifChar.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
vnifChar.Header.Size = sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS);

誰知道這個逗號是遵循哪個C的標準?

哪個標準都遵循
作者: converse    時間: 2007-06-07 10:25
這個問題一點都不復雜嘛,就是原來你寫:

int i = 1,j = 1;

變成了:

int i = 1,
     j =1;
作者: cjaizss    時間: 2007-06-07 10:31
這是C語言最基本的規(guī)則,只是最好你不要這么寫,分兩行寫看的多清楚
作者: langue    時間: 2007-06-07 12:19
原帖由 converse 于 2007-6-7 10:25 發(fā)表
這個問題一點都不復雜嘛,就是原來你寫:

int i = 1,j = 1;

變成了:

int i = 1,
     j =1;


兩者不同,并且根據(jù)常識判斷,此處的逗號是手誤,應作分號,盡管存在逗號表達式容許這句語句合法。
作者: converse    時間: 2007-06-07 12:21
原帖由 langue 于 2007-6-7 12:19 發(fā)表


兩者不同,并且根據(jù)常識判斷,此處的逗號是手誤,應作分號,盡管存在逗號表達式容許這句語句合法。


作者: 醉臥水云間    時間: 2007-06-07 12:34
原帖由 langue 于 2007-6-7 12:19 發(fā)表


兩者不同,并且根據(jù)常識判斷,此處的逗號是手誤,應作分號,盡管存在逗號表達式容許這句語句合法。


不合法,除非:
int i=0;
int j=0;
作者: coco520    時間: 2007-06-07 12:44
原帖由 emacsnw 于 2007-6-7 10:03 發(fā)表


不就是逗號表達式嗎?



能不能給我詳細說一下逗號表達式,謝謝了!學點東西。
作者: coco520    時間: 2007-06-07 12:47
原帖由 converse 于 2007-6-7 10:25 發(fā)表
這個問題一點都不復雜嘛,就是原來你寫:

int i = 1,j = 1;

變成了:

int i = 1,
     j =1;



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

編譯可以通過,我想知道是不是C的語法允許的還是ddk的擴展。
作者: langue    時間: 2007-06-07 12:50
原帖由 coco520 于 2007-6-7 12:47 發(fā)表



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

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


的確,編譯能通過是因為存在逗號表達式;這語句合法,但在某種意義上是程序員的手誤。
作者: langue    時間: 2007-06-07 13:01
原帖由 醉臥水云間 于 2007-6-7 12:34 發(fā)表


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


能做進一步的解釋嗎?我的理解是:

bid = 1,
forbid = 2;

相當于

bid = 1,  forbid = 2;

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

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

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

.

[ 本帖最后由 langue 于 2007-6-7 13:02 編輯 ]
作者: converse    時間: 2007-06-07 13:08
原帖由 langue 于 2007-6-7 12:50 發(fā)表


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


為啥langue總要認為是"手誤"啊,很多人都這么寫的.
作者: converse    時間: 2007-06-07 13:09
原帖由 coco520 于 2007-6-7 12:47 發(fā)表



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

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


糾正一下你的理解,我前面給的例子不是聲明是定義,也是變量賦值.
作者: coco520    時間: 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
作者: wangruihit    時間: 2007-06-07 16:23
標題: 逗號表達式
逗號表達式的值等于最后一個表達式的值;
例:
int i,j,m;
int k=(i=1,j=2,m=3);


此式的計算結(jié)果就是k=3;
作者: jaffaz    時間: 2007-06-07 16:29
原帖由 langue 于 2007-6-7 12:50 發(fā)表


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

定義變量的時候用到了逗號不能叫做逗號表達式吧
作者: langue    時間: 2007-06-07 18:41
原帖由 jaffaz 于 2007-6-7 16:29 發(fā)表

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


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。

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

.
作者: sithui    時間: 2007-06-07 22:23
逗號語句后面的空白可以是空格,TAB和換行符,這沒什么不對的,哪個準備都沒有限制這一點




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2