[問題] switch後面不能再有宣告其他變數?

看板C_and_CPP作者時間14年前 (2010/12/19 12:18), 編輯推噓16(16035)
留言51則, 15人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...) vs 2005 額外使用到的庫(Library Used) (Ex: OpenGL, ...) no 問題(Question): switch完 後面不能再有宣告其他變數??? 餵入的資料(Input): NA 預期的正確結果(Expected Output): 能compile過 錯誤結果(Wrong Output): 下面code中標黃色的那行(連結中的23行) error C2143: syntax error : missing ';' before 'type' 程式碼(Code): (請善用置底文標色功能) http://nopaste.csie.org/f18c6#form #include<stdio.h> #include<math.h> #define B 2 int main() { int choose = 2; double fast; switch(choose) { case B: { fast = pow(2,10); break; } default: { fast = pow(2,5); break; } } int fast2 =fast+1; return 0; } 補充說明(Supplement): 只要我在switch前先宣告fast2就可以順利執行 但就算我先宣告fast2,只要後面敘述又有宣告新變數, 則宣告的新變數那行出現同樣的error message "Orz 用dev c++無此問題,跳回vs 2005才這樣... 想請問該如何改進... 感謝(T_T) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.240.135.242 ※ 編輯: greenfish27 來自: 111.240.135.242 (12/19 20:21)

12/19 20:21, , 1F
就是vs2005的編譯器不允許阿= = 硬要的話檔名改cpp吧
12/19 20:21, 1F

12/19 20:28, , 2F
這樣的內規資訊該如何得知呢? 謝謝樓上解內文惑!!
12/19 20:28, 2F

12/19 20:37, , 3F
如果在int前面放個;呢0.0
12/19 20:37, 3F

12/19 20:39, , 4F
這是舊得C規定只能在開頭宣告變數吧
12/19 20:39, 4F

12/19 20:42, , 5F
沒道理VS2005不能.我這裡測試是完全正常.
12/19 20:42, 5F

12/19 20:42, , 6F
改成int fast2; fast2 = fast1+1;試試...
12/19 20:42, 6F

12/19 20:42, , 7F
原Po的code確定這樣compile有問題?
12/19 20:42, 7F

12/19 20:43, , 8F
我沒在用vs2005,不過變數宣告的位置很不舒服....
12/19 20:43, 8F

12/19 20:44, , 9F
x0000 哈哈我有異想天開試過這麼做 不過不行XD"
12/19 20:44, 9F

12/19 20:44, , 10F
都寫在前面也並非是好的style.不過這不討論風格問題.
12/19 20:44, 10F

12/19 20:45, , 11F
如果code沒有錯的話.檢查一下有沒有全形空白參在程式裡.
12/19 20:45, 11F

12/19 20:45, , 12F
error跟原po描述的情況對不起來.
12/19 20:45, 12F

12/19 20:45, , 13F
masterChang 只要是在swich那個區塊後有宣告都不行
12/19 20:45, 13F

12/19 20:46, , 14F
NDark 我對手邊的vs2005不行也是感到很詭異
12/19 20:46, 14F

12/19 20:47, , 15F
switch 用大括號刮起來
12/19 20:47, 15F

12/19 20:47, , 16F
還以為是電腦又發瘋了 還換了一台電腦跑跑看 不行Orz
12/19 20:47, 16F

12/19 20:48, , 17F
你是開什麼專案?
12/19 20:48, 17F

12/19 20:50, , 18F
找到了.跟 nowar100 講的一樣
12/19 20:50, 18F

12/19 20:50, , 19F
Visual c++\win32 console 開什麼專案是指這個嗎
12/19 20:50, 19F

12/19 20:50, , 20F
.c 變數宣告要提前 .cpp 就沒這個限制.
12/19 20:50, 20F

12/19 20:51, , 21F
這不是VS造成的.反而是VS做的很好把C與C++分的很清楚.
12/19 20:51, 21F

12/19 20:51, , 22F
十分感謝大家給予意見~<(_ _)>
12/19 20:51, 22F

12/19 20:52, , 23F
原來如此~
12/19 20:52, 23F

12/19 20:57, , 24F
這根本不是 C/C++ 分不分得清楚的問題, 是VS本來就不
12/19 20:57, 24F

12/19 20:58, , 25F
打算追著C語言新標準跑, 所以用VS來寫C語言不適當, 太
12/19 20:58, 25F

12/19 20:58, , 26F
請參考 #1CvtVSzw
12/19 20:58, 26F

12/19 20:58, , 27F
不人性
12/19 20:58, 27F

12/19 21:57, , 28F
C99 ...
12/19 21:57, 28F

12/19 22:53, , 29F
這是18000篇耶 XDD
12/19 22:53, 29F

12/20 00:22, , 30F
love大,不是這樣樣講的 若改用gcc來編的話 那樣的code
12/20 00:22, 30F

12/20 00:23, , 31F
也是不會過 除非你下 -std=c99 這樣才行
12/20 00:23, 31F

12/20 00:24, , 32F
M$ 它們本來就是以附檔名決定該使用的compiler為何
12/20 00:24, 32F

12/20 00:24, , 33F
因此原作者這樣的code沒法過是正常的
12/20 00:24, 33F

12/20 00:52, , 34F
樓上是用哪一牌gcc? 連 -std=c89 都可以過了...
12/20 00:52, 34F

12/20 01:20, , 35F
除了-std=c89之外還要加-pedantic gcc才會給出不符合c89標
12/20 01:20, 35F

12/20 01:23, , 36F
準的warning 是不是很少人知道要加-pedantic阿= =
12/20 01:23, 36F

12/20 01:25, , 37F
雖然給出warning但還是編過了 看來gcc真的比較人性一點XD
12/20 01:25, 37F

12/20 01:28, , 38F
真的耶@_@
12/20 01:28, 38F

12/20 01:35, , 39F
想要檢驗自己code符不符標準的人 切記要加-pedantic阿!
12/20 01:35, 39F

12/20 01:46, , 40F
收到! XDD
12/20 01:46, 40F

12/20 02:10, , 41F
Pedantic 這 flag 名還挺靠北的...
12/20 02:10, 41F

12/20 02:26, , 42F
不知道pedantic的人+1 有學到有推!!
12/20 02:26, 42F

12/20 02:30, , 43F
嗯嗯 XD
12/20 02:30, 43F

12/20 11:55, , 44F
我也今天才學到pedantic用法 Orz
12/20 11:55, 44F

12/20 16:46, , 45F
但gcc的man文件說有人會想用pedantic檢驗自己的code是否
12/20 16:46, 45F

12/20 16:47, , 46F
符合standard 但好像這指令並不是要做這樣的功能的樣子
12/20 16:47, 46F

12/20 16:49, , 47F
(不過看玩那一大段落我還是不了解這指令最終目的是啥= =
12/20 16:49, 47F

12/20 18:53, , 48F
應該是說pedantic不能保證抓出所有不符合標準的code 只能抓
12/20 18:53, 48F

12/20 18:56, , 49F
出在標準中有聲明編譯器必須要抓的部份 所以能幫助程式人員
12/20 18:56, 49F

12/20 18:56, , 50F
的code儘可能的貼近標準
12/20 18:56, 50F

12/20 21:48, , 51F
看起來是個好東西 XD
12/20 21:48, 51F
文章代碼(AID): #1D3VWQQV (C_and_CPP)