ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 4:07 PM
還以為我沒 forward declaration 結果只是我打錯字幹
花我十分鐘
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 4:07 PM
不過搞不清楚什麼 scope 下宣告 func(struct foo[]) 這樣才不會 type incomplete
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 4:08 PM
還是那其實只是因為我之前打錯字的關係
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 4:09 PM
不行ㄟ
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 4:09 PM
為什麼 好奇妙ㄛ
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 4:10 PM
我一直以為只有傳二維 struct array 要定義第二層的大小,因為 compiler 會不知道這個陣列要給多大
背脂拉麵
@ajisaiiii
Mon, Nov 9, 2020 5:11 PM
我覺得是你打錯ㄅ
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:11 PM
JaidTw
: 沒欸 我這是改好之後實驗ㄉ
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:15 PM
我 include 別ㄉ header file 到另一個 header file
typedef strcut User user;
int readline(char* buffer, int fd, user user_list[]);
這樣會 type incomplete
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:16 PM
可是改成
int readline(..., user* user_list);
編譯器就不會不知道這個型別要多大的空間
背脂拉麵
@ajisaiiii
Mon, Nov 9, 2020 5:24 PM
我還是覺得是你寫錯ㄟ
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:25 PM
JaidTw
:
就只有這兩行欸
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:25 PM
我看很久ㄌ
背脂拉麵
@ajisaiiii
Mon, Nov 9, 2020 5:25 PM
你確定你有include對嗎 你宣告一個實體不是指標的user看看
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:29 PM
我改成我原先寫ㄉ
宣告不是指標的只有在最初 user 被宣告的那個 header file 裡面ㄉ function 是可以被理解ㄉ
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:31 PM
user.h 內部宣告 user list[] 為參數的話不會出錯
在這之外不能這樣寫
ㄛ順便講一下我ㄉ gcc 是 7
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:32 PM
Mon, Nov 9, 2020 10:05 PM
而且 include 錯的話不會是這ㄍ錯誤ㄅ,會直接說 unknown type
或是 type conflict?
背脂拉麵
@ajisaiiii
Mon, Nov 9, 2020 5:36 PM
好妙喔 不過基本上你有typedef不會是unknown type,他resolved不到user的定義就會是incomplete type
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 5:37 PM
我也是第一次知道這ㄍ現象,神奇
我只是懶ㄉ再用 list 這次就叫一個 struct array 結果翻車
背脂拉麵
@ajisaiiii
Mon, Nov 9, 2020 6:03 PM
我試了一下用g++, clang++是可以過的 不確定是不是標準定義不太一樣
背脂拉麵
@ajisaiiii
Mon, Nov 9, 2020 6:09 PM
an error about C struct array in formal parameter
ㄌㄐ@你的水潤餅大使
@raagi
Mon, Nov 9, 2020 6:19 PM
酷
oToToT@(>▂<)
@oTo_ToT
Mon, Nov 9, 2020 7:39 PM
C 真的好難寫 QAQ
背脂拉麵
@ajisaiiii
Tue, Nov 10, 2020 12:28 AM
oToToT@(>▂<)
: 對...對ㄅ起我ㄅ會C
載入新的回覆
花我十分鐘
typedef strcut User user;
int readline(char* buffer, int fd, user user_list[]);
這樣會 type incomplete
int readline(..., user* user_list);
編譯器就不會不知道這個型別要多大的空間
宣告不是指標的只有在最初 user 被宣告的那個 header file 裡面ㄉ function 是可以被理解ㄉ
在這之外不能這樣寫
ㄛ順便講一下我ㄉ gcc 是 7
或是 type conflict?
我只是懶ㄉ再用 list 這次就叫一個 struct array 結果翻車