【原創】使用 VS 編譯遇到的一些 error 和 warning(持續更新)


error C2143 html

error C2143: 語法錯誤 : 缺乏「;」(在「類型」的前面)

緣由:以「編譯爲 C 代碼(/TC)」方式編譯時,沒有把變量定義在函數開始的位置。 shell

error LNK2019 ide

error LNK2019: 沒法解析的外部符號 _abc,該符號在函數 _xyz 中被引用

緣由:
當前源文件 xyz 中使用了外部符號 abc ,可是沒法找到該符號,緣由是沒有包含對應的 .lib 庫文件。
另外可能的緣由:
函數

  • 包含了 .lib 庫可是沒有將相應的符號 abc 導出
  • 還有一種狀況是因爲頭文件和庫文件不匹配形成

【error C2733】 this

error C2733: second C linkage of overloaded function 'wmemchr' not allowed

緣由:針對處於 C++ 模式下的 VC6 以及其它 VS 版本,當進行 ARM 相關編譯時應該對要使用的 <wchar.h> 頭文件進行 'extern "C++" {}' 處理。
spa

#ifdef __cplusplus
extern "C" {
#endif

#  include <wchar.h>

#ifdef __cplusplus
}
#endif

【error C2440】 .net

error C2440: 「=」: 沒法從「void *」轉換爲「void **」

緣由:通常會在調用 malloc 函數後將其返回值賦值給其餘變量時出現,值得注意的是,出現該錯誤的前提是按照「編譯爲 C++ 代碼 (/TP)」進行編譯,若是按照「編譯爲 C 代碼 (/TC)」進行編譯則不會出現該錯誤。 code

【error C2054】 orm

error C2054: 在「inline」以後應輸入「(」
緣由:這個錯誤出如今以「 編譯爲 C 代碼 (/TC) 」進行編譯時,內聯函數使用 inline 來標示,而沒有使用 __inline 標識。能夠在 以「 編譯爲 C 代碼 (/TC) 」進行編譯時,增長宏定義 #define inline __inline 。


【Warning C4251】 htm

warning C4251: 'AClass::m_variable' : class 'SomeTemplate<T>' needs
to have dll-interface to be used by clients of class 'AClass'

緣由: 牛逼文章1 文章2


Warning C4996

warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup.
warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

緣由:詳細緣由須要參考MSDN上的官方說明

相關文章
相關標籤/搜索