作者LPH66 (-858993460)
看板C_and_CPP
標題Re: [問題] C語言 struct 問題
時間Sat Nov 20 15:25:14 2010
※ 引述《madoka82 (惡水上的大橋)》之銘言:
: → madoka82:眼殘...沒看到還是要在 VC 下頭編,如果是只改檔名就可以 11/20 12:14
: → madoka82:解決的問題,那還是直接改副檔名或許會快一點... 11/20 12:14
: → tropical72:的確馬上改檔名可以過,只是用.c一直過不去所以很好奇 11/20 12:19
: → tropical72:另外..您的code我於vc用.c測,似乎沒辦法過.. 11/20 12:20
: → tropical72:我的原碼與錯誤訊息:http://nopaste.csie.org/190d9 11/20 12:24
: → madoka82:如果把 (1) typedef 那行的 struct 拿掉可以過嗎?_? 好奇 11/20 12:25
: → tropical72:一樣不會.我縮減我的程式碼,發現問題都是在 (a) 行 11/20 12:34
: → tropical72:http://nopaste.csie.org/f80c7 註解掉就過了. 11/20 12:35
: → tropical72:所以才上MSDN查C2275 http://ppt.cc/TI(W ,還是看不出 11/20 12:36
: → tropical72:個所以然.. 11/20 12:36
: 推 tomcallme:我也都這樣寫 11/20 15:14
這個是這樣的:
上面的 struct 那段定義了一個 unnamed struct
然後用 typedef 把這個 unnamed struct 定成 Node
再把 Node* 去定義 pNode
也就是並不存在 'struct Node' 這個東西
所以你的結構定義裡的 struct Node * 就會導致 C4133
至於那個 C2275....純粹是因為你在函式中間才宣告變數的關係
C 語言規定所有的變數宣告一定要在 block 的開頭
也就是跟在 { 的後面
不能在函式中間直接宣告新變數...
--
'Oh, Harry, don't you
see?' Hermione breathed. 'If she could have done
one thing to make
absolutely sure that every single person in this school
will read your interview, it was
banning it!'
---'Harry Potter and the order of the phoenix', P513
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92
推 tomcallme:發問~我也是寫C 可是沒碰過最後四句那個情況耶 = = 11/20 15:31
→ LPH66:樓上那是你都用 .cpp 的副檔名的關係... 11/20 15:36
推 tomcallme:我都用*.c ...... 11/20 15:39
推 tomcallme:0.0 真的啦 我沒有騙你 我的程式都是.c的副檔名 11/20 15:42
→ james732:那樓上用的編譯環境? 11/20 15:42
→ tomcallme:Dev-c++ 或是 code::blocks 11/20 15:42
→ tomcallme:你應該是問這個吧 我沒有很專業 怕答非所問 11/20 15:43
→ james732:是的,剛剛試了一下gcc就算是.c檔其實也不會抓這個問題 11/20 15:44
推 tomcallme:喔喔 3Q 11/20 15:45
推 nowar100:因為gcc預設是延伸過的標準 改用-std=c89應該就會錯 11/20 15:46
→ james732:-std=c89與-ansi都不會錯 真是... 11/20 15:46
推 tomcallme:所以這是舊的觀念的意思嗎? 11/20 15:49
→ nowar100:神奇 竟然沒錯 那是以前的標準 後來就拿掉了 11/20 15:50
→ james732:應該說這是標準的規定,但編譯器可能會放寬這個規則 11/20 15:50
推 tomcallme:嗯~ 11/20 15:51
→ loveme00835:XD 所以大家寫 C 語言都把變數全堆在一起囉? 11/20 15:58
→ james732:我看過的寫法是用 { } 弄出一個 block 再宣告變數 11/20 16:00
→ james732:void func() { 變數 程式 { 變數 程式 } } 這樣的感覺 11/20 16:01
推 loveme00835:C99 A.2.3 block-item-list 那邊就可以穿插用阿 XD 11/20 16:06
→ tropical72:事實這問題我查了一些時間,如loveme大大所說,c99有支援 11/20 16:49
→ tropical72:好笑的是又看到"流言"說,M$公布不從C99,於是遇到這種 11/20 16:50
→ tropical72:窘境.不論如何,謝謝LPH說明,我受益良多 :) 11/20 16:51
→ tropical72:附註:dev-c++, gcc, code::blocks 查是都從C99 11/20 16:52
推 Yshuan:gcc的確沒有最後那4行的問題! 最近用VC就有 - - 11/22 01:07
推 Bencrie:最後那四行 ... 編譯會過不代表沒問題啊 XD 11/22 16:40