一行邏輯錯誤,但文法沒有錯誤的代碼

來源:互聯網
上載者:User

  用C++調用windows API進行非阻塞TCP通訊,其中一行代碼被我寫成了如下:

if (SOCKET_ERROR == (sock, (sockaddr *)&addr, sizeof(addr)))<br />{<br />cout << "Bind Failed" << endl;<br />WSACleanup();<br />return 0;<br />}

這段代碼編譯沒有任何錯誤與警告,但結果並不是我想要的。調試了半天也沒有結果。最後實在沒有辦法,我把代碼拷到CodeBlocks中,用GCC編譯,結果一樣。再次重新檢查代碼的時候,才發現,綁定本地ip與連接埠的這行代碼很詭異。我盡然把bind(...)寫成了(...)。==操作符右邊是一個逗號運算式,返回sizeof(addr),剛好是一個整形,所以文法沒有任何錯誤。正確的代碼應該這樣:

if (SOCKET_ERROR == bind(sock, (sockaddr *)&addr, sizeof(addr)))<br />{<br />cout << "Bind Failed" << endl;<br />WSACleanup();<br />return 0;<br />}

我想我在寫代碼的時候,應該不至於把bind(...)寫成(...),可能是在編碼過程中,不小心把"bind"給ctrl + x了。但這樣的錯誤實在是難以發現。

 

  如果用C#寫類似的代碼,我相信自己不會犯這樣的錯誤。因為在.NET平台下,所有的類,枚舉在編輯器上顯示的顏色與一般的方法,屬性是不一樣的;同時因為.NET的對象是自我描述的,強大的智能提示功能也減小了犯類似錯誤的機率。確實,一個好的工具,能提高編碼的效率,減少犯錯誤的機會。想想,如果.NET沒有Visual Studio這樣的配套工具,可能.NET也不會有今天這樣的流行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.