看板 C_and_CPP 關於我們 聯絡資訊
想請問各位大大,如果像這樣 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
OPIV: 原來 comma 在這裡是 separator 而不是 operator… 11/27 05:16
OPIV: 這樣就沒問題了 11/27 05:16
OPIV: 再請問,如果 typedef int fun(int); 11/27 06:25
OPIV: 那麼我可以用 fun 來定義函數嗎?像是 fun foo(a) { return 11/27 06:26
OPIV: a * 5; } 之類的?還是只能宣告? 11/27 06:26
johnjohnlin: stackoverflow 好像說只能拿來宣告 11/27 15:05
littleshan: typedef後當然可以作為函式宣告的一部份 11/28 22:31
littleshan: 但是 C 的 function 本體沒辦法 pass by value 11/28 22:31
littleshan: 所以你得寫成 fun* foo(a) { ... } 11/28 22:32
suhorng: @littleshan: 我以為原 PO 想問的是能不能寫類似 11/29 00:22
suhorng: let foo : fun = λ a → .... 之類的東西, 用 fun 來 11/29 00:22
OPIV: 我是想要用 fun 做 foo 的原型沒錯,好像真的沒辦法這麼做 11/29 16:03
littleshan: C沒有function literal呀 11/29 23:31
FRAXIS: 那我問一個類似的 int a = 5, b = a; 11/30 15:09
FRAXIS: 如果 comma 只是 separator 這樣 b 的初始化是合法的嗎? 11/30 15:09
LPH66: 合法; 標準規定 T x, y, z; 等同於 T x; T y; T z; 11/30 21:15
LPH66: 其中上一行的 x y z 包含 名字/*/&/.../[]/初始化 等等 11/30 21:16
LPH66: 語法上 x y z 表示的這一團叫做 init-declarator 11/30 21:16
FRAXIS: 感謝 那再問一個不相關的 i = sizeof(i++); 11/30 21:21
FRAXIS: 是 undefined behavior 嗎? 11/30 21:21
LPH66: sizeof 不運算其參數, 所以不是 11/30 23:18
OPIV: 那如果是 function parameter list 呢? 12/01 01:50
OPIV: 這樣是合法的嗎? 12/01 01:51
OPIV: void foo(int a, int b, int array[a][b][]); 12/01 01:51