VS2015寫C++莫名檢測到大括弧不匹配的奇葩問題如何解決?
01-06
題主軟體工程大一學生,最近有個同學跑一段代碼總是報錯,類似於「大括弧不匹配」之類的錯誤,來讓我幫忙看看。
我仔細地檢查了那一段代碼,無論哪裡都沒有找到問題。雙擊錯誤信息,編譯器(VS2015)跳轉到那一行根本沒有大括弧。於是我用死辦法,把文件里的函數一個接一個注釋掉,然後編譯檢查問題。鎖定了錯誤肯定出在某個函數里:這就是那段注釋掉才可以編譯成功的代碼。因為注釋掉這段代碼編譯就沒問題了,所以錯誤一定出現在這裡。然而我仍然沒有檢查出任何問題。於是我建立了一個新工程,複製了這個函數實驗。結果如下:一個簡單的佔位函數,編譯正常,不報錯,現在換成上面那段代碼題主確認已經仔仔細細檢查過了,絕對不存在全形大括弧的問題,因為所有的大括弧、中括弧、小括弧都是半形符號。但是我把這個函數截屏下來,然後一個字也不差地重新寫一遍,編譯卻成功了。後來我們發現了更詭異的現象: 這段錯誤代碼直接發文件吧……http://vdisk.weibo.com/s/de8VPy5T0auL7求大神解釋一下,這究竟是什麼情況?如果真是字元的問題,為什麼在寫程序的時候VS沒有報錯,而編譯運行的時候卻報錯了呢?
你的換行符有問題,以至於VC認為後面的一堆代碼在同一行,這種情況下//清除緩衝區 這句注釋導致了後面的代碼一起被注釋掉,所以最後你的代碼實際上只剩下
bool user_say_yes() { char c; cout &<&< "(y, n) ? " &<&< flush;
具體換行符是丟了還是丟了
我就沒細看了…… 你刪了所有的換行重新換一遍應該就好了,在保存的高級選項里 指定換行符 也許也可以解決問題。
把出錯代碼保存成utf-8+bom格式試試,我以前也遇到過這種問題不是換行符的錯,是你的中文注釋字元導致的,去掉中文注釋也可以
我猜你那段有問題的代碼是在Mac下寫的,然後保存直接複製進了win下,這樣有個問題。
在Windows中,使用「回車CR("")」和「換行LF("
")」兩個字元作為換行符。Windows系統裡面,每行結尾是 回車+換行(CR+LF),即「
」。Mac系統里,每行結尾是 回車CR 即"
"。
所以在Mac下寫的換行移到win中就失效了,而VS顯示時可能恰好能將"
"當作為換行。但進行語法檢測時就不一定了。
用notepad++看了看,換行符有問題。Windows下的換行應該是CRLF,也就是"
"。有些地方只有CR轉換一下行尾格式,或者換個正常點的編輯器把代碼重新打一遍就好了
另外這個void main()是看著老譚的書寫的嗎。。。
其他人已經說了換行符的問題了,我來解答一下為什麼編寫沒問題編譯出錯因為智能提示和編譯器用的是兩套不同的系統,不完全一樣
這種奇葩問題我也遇到過,一般複製文本尤其是代碼最好先複製到notepad,確保格式正確再從notepad複製到IDE
換行符問題還好我有全部源代碼UTF-8+Unix換行符的好習慣
這種情況就應該vimdiff
我猜測是中文注釋導致下一行代碼被當做同一行注釋掉了,出現這種問題的原因可能是你的源文件保存的格式是不帶bom頭的utf-8,改成帶bom頭試試.順便說一種處理各種"奇葩編譯錯誤"的方法:可以使用/E選項或者在c/c++選項里開啟預處理到文件,因為預處理後的translation unit才是編譯器真正編譯的東西,在這裡你應該會發現代碼哪裡錯了,授人以魚,不如授人以漁,:)
其他答案正解。原來我用CLion和VS同時編輯一段代碼中間有個注釋,然後VS就爆炸了表示並不知道我在寫什麼...
總算大概知道我的程序為什麼出錯了....同mac copy到win。。。不過我是直接打開的文件...
先粘到記事本再複製
推薦閱讀:
※有哪些使用Visual Studio 的好習慣或者小技巧?
※你覺得什麼樣的程序員才有資格被稱作【碼農】?
※為什麼 Visual Studio Emulator for Android 那麼流暢?
※如何看待VS繁長的安裝和卸載過程以及卸載不徹底問題?難道微軟沒辦法優化這個過程嗎?
TAG:編程 | MicrosoftVisualStudio |