[問題] Comma

看板C_and_CPP作者 (稻草人)時間10年前 (2015/11/27 05:01), 10年前編輯推噓6(6018)
留言24則, 6人參與, 最新討論串1/1
想請問各位大大,如果像這樣 int a, b, c; 那麼 a, b, c 的宣告有順序可言嗎? a b c 應該都算是 expression? 我想到的驗證方法是用 struct 因為 struct 的最後一個 element 可以是 incomplete type,如果這個 struct 包含不 只一個 element 的話 所以如果 a, b, c 沒順序的話 struct test {   int a, b[], c; }; 應該是合法的?(可是編譯沒過) 但是 struct test {   int a, b, c[]; }; 就編譯過了 不知道為什麼會這樣啊… -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.2.70 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1448571674.A.D60.html ※ 編輯: OPIV (101.13.2.70), 11/27/2015 05:08:37

11/27 05:16, , 1F
原來 comma 在這裡是 separator 而不是 operator…
11/27 05:16, 1F

11/27 05:16, , 2F
這樣就沒問題了
11/27 05:16, 2F

11/27 06:25, , 3F
再請問,如果 typedef int fun(int);
11/27 06:25, 3F

11/27 06:26, , 4F
那麼我可以用 fun 來定義函數嗎?像是 fun foo(a) { return
11/27 06:26, 4F

11/27 06:26, , 5F
a * 5; } 之類的?還是只能宣告?
11/27 06:26, 5F

11/27 15:05, , 6F
stackoverflow 好像說只能拿來宣告
11/27 15:05, 6F

11/28 22:31, , 7F
typedef後當然可以作為函式宣告的一部份
11/28 22:31, 7F

11/28 22:31, , 8F
但是 C 的 function 本體沒辦法 pass by value
11/28 22:31, 8F

11/28 22:32, , 9F
所以你得寫成 fun* foo(a) { ... }
11/28 22:32, 9F

11/29 00:22, , 10F
@littleshan: 我以為原 PO 想問的是能不能寫類似
11/29 00:22, 10F

11/29 00:22, , 11F
let foo : fun = λ a → .... 之類的東西, 用 fun 來
11/29 00:22, 11F

11/29 16:03, , 12F
我是想要用 fun 做 foo 的原型沒錯,好像真的沒辦法這麼做
11/29 16:03, 12F

11/29 23:31, , 13F
C沒有function literal呀
11/29 23:31, 13F

11/30 15:09, , 14F
那我問一個類似的 int a = 5, b = a;
11/30 15:09, 14F

11/30 15:09, , 15F
如果 comma 只是 separator 這樣 b 的初始化是合法的嗎?
11/30 15:09, 15F

11/30 21:15, , 16F
合法; 標準規定 T x, y, z; 等同於 T x; T y; T z;
11/30 21:15, 16F

11/30 21:16, , 17F
其中上一行的 x y z 包含 名字/*/&/.../[]/初始化 等等
11/30 21:16, 17F

11/30 21:16, , 18F
語法上 x y z 表示的這一團叫做 init-declarator
11/30 21:16, 18F

11/30 21:21, , 19F
感謝 那再問一個不相關的 i = sizeof(i++);
11/30 21:21, 19F

11/30 21:21, , 20F
是 undefined behavior 嗎?
11/30 21:21, 20F

11/30 23:18, , 21F
sizeof 不運算其參數, 所以不是
11/30 23:18, 21F

12/01 01:50, , 22F
那如果是 function parameter list 呢?
12/01 01:50, 22F

12/01 01:51, , 23F
這樣是合法的嗎?
12/01 01:51, 23F

12/01 01:51, , 24F
void foo(int a, int b, int array[a][b][]);
12/01 01:51, 24F
文章代碼(AID): #1MLtCQrW (C_and_CPP)